Browse Source

Merge remote-tracking branch 'gero3/sourcemaps' into dev

Mr.doob 12 years ago
parent
commit
78f69dbf35
3 changed files with 63 additions and 54 deletions
  1. 20 24
      utils/build.js
  2. 42 29
      utils/build.py
  3. 1 1
      utils/package.json

+ 20 - 24
utils/build.js

@@ -1,7 +1,7 @@
 var fs = require("fs");
 var fs = require("fs");
 var path = require("path");
 var path = require("path");
 var argparse =  require( "argparse" );
 var argparse =  require( "argparse" );
-var uglify = require("uglify-js");
+var uglify = require("uglify-js2");
 var spawn = require('child_process').spawn;
 var spawn = require('child_process').spawn;
 
 
 function main(){
 function main(){
@@ -10,7 +10,8 @@ function main(){
     parser.addArgument(['--include'], {"action":'append', 'required':true});
     parser.addArgument(['--include'], {"action":'append', 'required':true});
     parser.addArgument(['--externs'], {"action":'append', "defaultValue":['./externs/common.js']});
     parser.addArgument(['--externs'], {"action":'append', "defaultValue":['./externs/common.js']});
     parser.addArgument(['--minify'], {"action":'storeTrue', "defaultValue":false});
     parser.addArgument(['--minify'], {"action":'storeTrue', "defaultValue":false});
-    parser.addArgument(['--output'], {"defaultValue":'../build/three.js'});   
+    parser.addArgument(['--output'], {"defaultValue":'../build/three.js'});  
+    parser.addArgument(['--sourcemaps'], {"action":'storeTrue', "defaultValue":false});
     
     
     
     
 	var args = parser.parseArgs();
 	var args = parser.parseArgs();
@@ -18,13 +19,21 @@ function main(){
     var output = args.output;
     var output = args.output;
     console.log(' * Building ' + output);
     console.log(' * Building ' + output);
     
     
-    console.dir(args);
+    var sourcemap,sourcemapping,sourcemapargs;
+    if (args.sourcemaps){
+		sourcemap = output + '.map';
+    	sourcemapping = '\n//@ sourceMappingURL=' + sourcemap;
+	}else{
+		sourcemap = sourcemapping = sourcemapargs = '';
+	}
     
     
     var buffer = [];
     var buffer = [];
+    var sources = [];
     for (var i = 0;i < args.include.length;i++){
     for (var i = 0;i < args.include.length;i++){
         
         
         var files = JSON.parse(fs.readFileSync('./includes/' + args.include[i] + '.json', 'utf8'));
         var files = JSON.parse(fs.readFileSync('./includes/' + args.include[i] + '.json', 'utf8'));
         for (var file = 0;file < files.length;file++){
         for (var file = 0;file < files.length;file++){
+    		sources.push(files[file]);
             buffer.push(fs.readFileSync(files[file], 'utf8'));
             buffer.push(fs.readFileSync(files[file], 'utf8'));
         }
         }
     }
     }
@@ -34,30 +43,17 @@ function main(){
     if (!args.minify){
     if (!args.minify){
         fs.writeFileSync(output,temp,'utf8');
         fs.writeFileSync(output,temp,'utf8');
     } else {
     } else {
+        var result = uglify.minify(sources, {
+            outSourceMap: sourcemap
+        });
         
         
-        fs.writeFileSync(output,uglify(temp),'utf8');
         
         
-//        An attempt to get the closure minifier working
-
-//        var externs = ' --externs ' + args.externs.join();
-//        console.log(externs);
-//        var temppath = output + ".tmp";
-//        fs.writeFileSync(temppath,temp,'utf8');
-//        var java = spawn("java -jar ./compiler/compiler.jar --warning_level=VERBOSE --jscomp_off=globalThis " + externs + " --jscomp_off=checkTypes --language_in=ECMASCRIPT5_STRICT --js " + temppath + "  --js_output_file " + output);
-//        java.stdout.on('data', function (data) {
-//            console.log(data);
-//        });
-//        java.stderr.on('data', function (data) {
-//          console.log('java stderr: ' + data);
-//        });
-//        java.on('exit', function (code) {
-//            if (code !== 0) {
-//                console.log('java process exited with code ' + code);
-//            }
-//        });
-
-
+        fs.writeFileSync(output,result.code + sourcemapping,'utf8');
         
         
+
+        if (args.sourcemaps){
+            fs.writeFileSync(sourcemap,result.map,'utf8');
+        }
     
     
     }
     }
 }
 }

+ 42 - 29
utils/build.py

@@ -10,50 +10,63 @@ import tempfile
 
 
 def main(argv=None):
 def main(argv=None):
 
 
-  parser = argparse.ArgumentParser()
-  parser.add_argument('--include', action='append', required=True)
-  parser.add_argument('--externs', action='append', default=['externs/common.js'])
-  parser.add_argument('--minify', action='store_true', default=False)
-  parser.add_argument('--output', default='../build/three.js')
+	parser = argparse.ArgumentParser()
+	parser.add_argument('--include', action='append', required=True)
+	parser.add_argument('--externs', action='append', default=['externs/common.js'])
+	parser.add_argument('--minify', action='store_true', default=False)
+	parser.add_argument('--output', default='../build/three.js')
+	parser.add_argument('--sourcemaps', action='store_true', default=False)
 
 
-  args = parser.parse_args()
+	args = parser.parse_args()
 
 
-  output = args.output
+	output = args.output
 
 
-  # merge
+	# merge
 
 
-  print(' * Building ' + output)
+	print(' * Building ' + output)
 
 
-  fd, path = tempfile.mkstemp()
-  tmp = open(path, 'w')
+	# enable sourcemaps support
 
 
-  for include in args.include:
-    with open('includes/' + include + '.json','r') as f: files = json.load(f)
-    for filename in files:
-      with open(filename, 'r') as f: tmp.write(f.read())
+	if args.sourcemaps:
+		sourcemap = output + '.map'
+		sourcemapping = '\n//@ sourceMappingURL=' + sourcemap
+		sourcemapargs = ' --create_source_map ' + sourcemap + ' --source_map_format=V3'
+	else:
+		sourcemap = sourcemapping = sourcemapargs = ''
 
 
-  tmp.close()
+	fd, path = tempfile.mkstemp()
+	tmp = open(path, 'w')
+	sources = []
 
 
-  # save
+	for include in args.include:
+		with open('includes/' + include + '.json','r') as f: files = json.load(f)
+		for filename in files:
+			sources.append(filename)
+			with open(filename, 'r') as f: tmp.write(f.read())
 
 
-  if args.minify is False:
+	tmp.close()
 
 
-      shutil.copy(path, output)
-      os.chmod(output, 0o664); # temp files would usually get 0600
+	# save
 
 
-  else:
+	if args.minify is False:
+			shutil.copy(path, output)
+			os.chmod(output, 0o664); # temp files would usually get 0600
 
 
-    externs = ' --externs '.join(args.externs)
-    os.system('java -jar compiler/compiler.jar --warning_level=VERBOSE --jscomp_off=globalThis --externs %s --jscomp_off=checkTypes --language_in=ECMASCRIPT5_STRICT --js %s --js_output_file %s' % (externs, path, output))
+	else:
 
 
-    # header
+		externs = ' --externs '.join(args.externs)
+		source = ' '.join(sources)
+		cmd = 'java -jar compiler/compiler.jar --warning_level=VERBOSE --jscomp_off=globalThis --externs %s --jscomp_off=checkTypes --language_in=ECMASCRIPT5_STRICT --js %s --js_output_file %s %s' % (externs, source, output, sourcemapargs)
+		os.system(cmd)
 
 
-    with open(output,'r') as f: text = f.read()
-    with open(output,'w') as f: f.write('// three.js - http://github.com/mrdoob/three.js\n' + text)
+		# header
 
 
-  os.close(fd)
-  os.remove(path)
+		with open(output,'r') as f: text = f.read()
+		with open(output,'w') as f: f.write('// three.js - http://github.com/mrdoob/three.js\n' + text + sourcemapping)
+
+	os.close(fd)
+	os.remove(path)
 
 
 
 
 if __name__ == "__main__":
 if __name__ == "__main__":
-  main()
+	main()

+ 1 - 1
utils/package.json

@@ -9,7 +9,7 @@
     },
     },
 
 
     "devDependencies": {
     "devDependencies": {
-    	"uglify-js": "*",
+    	"uglify-js2": "*",
     	"argparse" : "*"
     	"argparse" : "*"
     },
     },