build.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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( ['--amd'], { action: 'storeTrue', defaultValue: false } );
  12. parser.addArgument( ['--minify'], { action: 'storeTrue', defaultValue: false } );
  13. parser.addArgument( ['--output'], { defaultValue: '../../build/three.js' } );
  14. parser.addArgument( ['--sourcemaps'], { action: 'storeTrue', defaultValue: false } );
  15. var args = parser.parseArgs();
  16. var output = args.output;
  17. console.log(' * Building ' + output);
  18. var sourcemap = '';
  19. var sourcemapping = '';
  20. if ( args.sourcemaps ){
  21. sourcemap = output + '.map';
  22. sourcemapping = '\n//@ sourceMappingURL=' + sourcemap;
  23. }
  24. var buffer = [];
  25. var sources = [];
  26. if ( args.amd ){
  27. buffer.push('function ( root, factory ) {\n\n\tif ( typeof define === \'function\' && define.amd ) {\n\n\t\tdefine( [ \'exports\' ], factory );\n\n\t} else if ( typeof exports === \'object\' ) {\n\n\t\tfactory( exports );\n\n\t} else {\n\n\t\tfactory( root );\n\n\t}\n\n}( this, function ( exports ) {\n\n');
  28. };
  29. for ( var i = 0; i < args.include.length; i ++ ){
  30. var contents = fs.readFileSync( './includes/' + args.include[i] + '.json', 'utf8' );
  31. var files = JSON.parse( contents );
  32. for ( var j = 0; j < files.length; j ++ ){
  33. var file = '../../' + files[ j ];
  34. buffer.push('// File:' + files[ j ]);
  35. buffer.push('\n\n');
  36. if( file.indexOf( '.glsl') >= 0 ) {
  37. buffer.push('THREE.ShaderChunk[\'' + path.basename(file, '.glsl') + '\'] = "');
  38. buffer.push(fs.readFileSync( file, 'utf8' ));
  39. buffer.push('";\n\n');
  40. }
  41. else {
  42. sources.push( file );
  43. buffer.push( fs.readFileSync( file, 'utf8' ) );
  44. buffer.push('\n');
  45. }
  46. }
  47. }
  48. if ( args.amd ){
  49. buffer.push('exports.THREE = THREE;\n\n} ) );');
  50. };
  51. var temp = buffer.join( '' );
  52. if ( !args.minify ){
  53. fs.writeFileSync( output,temp, 'utf8' );
  54. } else {
  55. var result = uglify.minify( sources, { outSourceMap: sourcemap } );
  56. fs.writeFileSync( output, '// threejs.org/license\n' + result.code + sourcemapping, 'utf8' );
  57. if ( args.sourcemaps ) {
  58. fs.writeFileSync( sourcemap, result.map, 'utf8' );
  59. }
  60. }
  61. }
  62. main();