提交 6d58c9ed 编写于 作者: M Mr.doob

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

var fs = require("fs");
var path = require("path");
var argsparser = require( "argsparser" );
var argparse = require( "argparse" );
var uglify = require("uglify-js");
function merge(files){
"use strict";
var buffer = [];
for (var i = 0,il = files.length;i<il;i++){
var fileName = path.join("src", files[i]);
buffer.push(fs.readFileSync(fileName,'utf8'));
}
return buffer.join("");
}
function output(text, filename){
"use strict";
var file = path.join('build', filename);
fs.writeFileSync(file,text,'utf8');
}
function compress(text, fname_externs){
/*
externs = ""
if fname_externs:
externs = "--externs %s.js" % fname_externs
in_tuple = tempfile.mkstemp()
with os.fdopen(in_tuple[0], 'w') as handle:
handle.write(text)
out_tuple = tempfile.mkstemp()
os.system("java -jar compiler/compiler.jar --warning_level=VERBOSE --jscomp_off=globalThis --jscomp_off=checkTypes --externs externs_common.js %s --language_in=ECMASCRIPT5_STRICT --js %s --js_output_file %s" % (externs, in_tuple[1], out_tuple[1]))
with os.fdopen(out_tuple[0], 'r') as handle:
compressed = handle.read()
os.unlink(in_tuple[1])
os.unlink(out_tuple[1])
return compressed*/
"use strict";
return uglify(text);
}
function addHeader(text, endFilename){
"use strict";
return "// " + endFilename + " - http://github.com/mrdoob/three.js\n" + text;
}
function makeDebug(text){
"use strict";
var position = 0;
while (true){
position = text.indexOf("/* DEBUG", position);
if (position == -1){
break;
}
text = text.substring(0,position) + text.substring(position+8);
position = text.find("*/", position);
text = text.substring(0,position) + text.substring(position+2);
}
return text;
}
function buildLib(files, debug, minified, filename, fname_externs){
"use strict";
var text = merge(files);
if (debug){
text = makeDebug(text);
filename = filename + 'Debug';
}
var folder;
if (filename == "Three"){
folder = '';
} else {
folder = 'custom/';
}
filename = filename + '.js';
//print("=" * 40)
console.log("========================================");
console.log("Compiling " + filename);
//print("=" * 40)
console.log("========================================");
if (minified){
text = compress(text, fname_externs);
}
output(addHeader(text, filename), folder + filename);
}
function buildIncludes(files, filename){
"use strict";
//var template = "\t\t<script src='../src/%s'></script>";
//var text = "\n".join(template % f for f in files)
var text = [];
for (var i = 0,il = files.length;i<il;i++){
text.push("\t\t<script src='../src/" + files[i] + "'></script>");
}
output(text.join("\n"), filename + '.js');
}
function getFileNames(){
"use strict";
var fileName = "utils/files.json";
var data = JSON.parse(fs.readFileSync(fileName,'utf8'));
return data;
}
function parse_args(){
"use strict";
//parse
var returnValue = argsparser.parse();
/*
# If no arguments have been passed, show the help message and exit
if len(sys.argv) == 1:
parser.print_help()
sys.exit(1)
*/
for (var i in returnValue){
if (i.substring(0,2) == "--"){
returnValue[i.substring(2)] = returnValue[i];
delete returnValue[i];
} else {
delete returnValue[i];
}
}
return returnValue;
}
var spawn = require('child_process').spawn;
function main(){
"use strict";
var args = parse_args();
var debug = args.debug;
var minified = args.minified;
var files = getFileNames();
var config = [
['Three', 'includes', '', files["common"].concat(files["extras"]), args.common],
['ThreeCanvas', 'includes_canvas', '', files["canvas"], args.canvas],
['ThreeWebGL', 'includes_webgl', '', files["webgl"], args.webgl],
['ThreeExtras', 'includes_extras', 'externs_extras', files["extras"], args.extras]
];
for (var i = 0,il = config.length;i<il;i++){
var chosenConfig = config[i],
fname_lib = chosenConfig[0],
fname_inc = chosenConfig[1],
fname_externs = chosenConfig[2],
files = chosenConfig[3],
enabled = chosenConfig[4];
if (enabled || args.all){
buildLib(files, debug, minified, fname_lib, fname_externs);
if (args.includes){
buildIncludes(files, fname_inc);
}
}
}
"use strict";
var parser = new argparse.ArgumentParser();
parser.addArgument(['--include'], {"action":'append', 'required':true});
parser.addArgument(['--externs'], {"action":'append', "defaultValue":['./externs/common.js']});
parser.addArgument(['--minify'], {"action":'storeTrue', "defaultValue":false});
parser.addArgument(['--output'], {"defaultValue":'../build/three.js'});
var args = parser.parseArgs();
var output = args.output;
console.log(' * Building ' + output);
console.dir(args);
var buffer = [];
for (var i = 0;i < args.include.length;i++){
var files = JSON.parse(fs.readFileSync('./includes/' + args.include[i] + '.json', 'utf8'));
for (var file = 0;file < files.length;file++){
buffer.push(fs.readFileSync(files[file], 'utf8'));
}
}
console.log(buffer.length);
var temp = buffer.join("");
if (!args.minify){
fs.writeFileSync(output,temp,'utf8');
} else {
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);
// }
// });
}
}
main();
......
......@@ -10,7 +10,7 @@
"devDependencies": {
"uglify-js": "*",
"argsparser" : "*"
"argparse" : "*"
},
"repository" : {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册