build.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. var fs = require("fs");
  2. var path = require("path");
  3. var argparse = require( "argparse" );
  4. var uglify = require("uglify-js2");
  5. var spawn = require('child_process').spawn;
  6. function main() {
  7. "use strict";
  8. var parser = new argparse.ArgumentParser();
  9. parser.addArgument( ['--include'], { action: 'append', required: true } );
  10. parser.addArgument( ['--externs'], { action: 'append', defaultValue: ['./externs/common.js'] } );
  11. parser.addArgument( ['--minify'], { action: 'storeTrue', defaultValue: false } );
  12. parser.addArgument( ['--output'], { defaultValue: '../../build/three.js' } );
  13. parser.addArgument( ['--sourcemaps'], { action: 'storeTrue', defaultValue: false } );
  14. var args = parser.parseArgs();
  15. var output = args.output;
  16. console.log(' * Building ' + output);
  17. var sourcemap = '';
  18. var sourcemapping = '';
  19. if ( args.sourcemaps ){
  20. sourcemap = output + '.map';
  21. sourcemapping = '\n//@ sourceMappingURL=' + sourcemap;
  22. }
  23. var buffer = [];
  24. var sources = [];
  25. for ( var i = 0; i < args.include.length; i ++ ){
  26. var contents = fs.readFileSync( './includes/' + args.include[i] + '.json', 'utf8' );
  27. var files = JSON.parse( contents );
  28. for ( var j = 0; j < files.length; j ++ ){
  29. var file = '../../' + files[ j ];
  30. sources.push( file );
  31. buffer.push( fs.readFileSync( file, 'utf8' ) );
  32. }
  33. }
  34. console.log( buffer.length );
  35. var temp = buffer.join( '' );
  36. if ( !args.minify ){
  37. fs.writeFileSync( output,temp, 'utf8' );
  38. } else {
  39. var result = uglify.minify( sources, { outSourceMap: sourcemap } );
  40. fs.writeFileSync( output, result.code + sourcemapping, 'utf8' );
  41. if ( args.sourcemaps ) {
  42. fs.writeFileSync( sourcemap, result.map, 'utf8' );
  43. }
  44. }
  45. }
  46. main();