2
0

build.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. var fs = require("fs");
  2. var path = require("path");
  3. var argsparser = require( "argsparser" );
  4. var uglify = require("uglify-js");
  5. function merge(files){
  6. "use strict";
  7. var buffer = [];
  8. for (var i = 0,il = files.length;i<il;i++){
  9. var fileName = path.join("src", files[i]);
  10. buffer.push(fs.readFileSync(fileName,'utf8'));
  11. }
  12. return buffer.join("");
  13. }
  14. function output(text, filename){
  15. "use strict";
  16. var file = path.join('build', filename);
  17. fs.writeFileSync(file,text,'utf8');
  18. }
  19. function compress(text, fname_externs){
  20. /*
  21. externs = ""
  22. if fname_externs:
  23. externs = "--externs %s.js" % fname_externs
  24. in_tuple = tempfile.mkstemp()
  25. with os.fdopen(in_tuple[0], 'w') as handle:
  26. handle.write(text)
  27. out_tuple = tempfile.mkstemp()
  28. 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]))
  29. with os.fdopen(out_tuple[0], 'r') as handle:
  30. compressed = handle.read()
  31. os.unlink(in_tuple[1])
  32. os.unlink(out_tuple[1])
  33. return compressed*/
  34. "use strict";
  35. return uglify(text);
  36. }
  37. function addHeader(text, endFilename){
  38. "use strict";
  39. return "// " + endFilename + " - http://github.com/mrdoob/three.js\n" + text;
  40. }
  41. function makeDebug(text){
  42. "use strict";
  43. var position = 0;
  44. while (true){
  45. position = text.indexOf("/* DEBUG", position);
  46. if (position == -1){
  47. break;
  48. }
  49. text = text.substring(0,position) + text.substring(position+8);
  50. position = text.find("*/", position);
  51. text = text.substring(0,position) + text.substring(position+2);
  52. }
  53. return text;
  54. }
  55. function buildLib(files, debug, minified, filename, fname_externs){
  56. "use strict";
  57. var text = merge(files);
  58. if (debug){
  59. text = makeDebug(text);
  60. filename = filename + 'Debug';
  61. }
  62. var folder;
  63. if (filename == "Three"){
  64. folder = '';
  65. } else {
  66. folder = 'custom/';
  67. }
  68. filename = filename + '.js';
  69. //print("=" * 40)
  70. console.log("========================================");
  71. console.log("Compiling " + filename);
  72. //print("=" * 40)
  73. console.log("========================================");
  74. if (minified){
  75. text = compress(text, fname_externs);
  76. }
  77. output(addHeader(text, filename), folder + filename);
  78. }
  79. function buildIncludes(files, filename){
  80. "use strict";
  81. //var template = "\t\t<script src='../src/%s'></script>";
  82. //var text = "\n".join(template % f for f in files)
  83. var text = [];
  84. for (var i = 0,il = files.length;i<il;i++){
  85. text.push("\t\t<script src='../src/" + files[i] + "'></script>");
  86. }
  87. output(text.join("\n"), filename + '.js');
  88. }
  89. function getFileNames(){
  90. "use strict";
  91. var fileName = "utils/files.json";
  92. var data = JSON.parse(fs.readFileSync(fileName,'utf8'));
  93. return data;
  94. }
  95. function parse_args(){
  96. "use strict";
  97. //parse
  98. var returnValue = argsparser.parse();
  99. /*
  100. # If no arguments have been passed, show the help message and exit
  101. if len(sys.argv) == 1:
  102. parser.print_help()
  103. sys.exit(1)
  104. */
  105. for (var i in returnValue){
  106. if (i.substring(0,2) == "--"){
  107. returnValue[i.substring(2)] = returnValue[i];
  108. delete returnValue[i];
  109. } else {
  110. delete returnValue[i];
  111. }
  112. }
  113. return returnValue;
  114. }
  115. function main(){
  116. "use strict";
  117. var args = parse_args();
  118. var debug = args.debug;
  119. var minified = args.minified;
  120. var files = getFileNames();
  121. var config = [
  122. ['Three', 'includes', '', files["common"].concat(files["extras"]), args.common],
  123. ['ThreeCanvas', 'includes_canvas', '', files["canvas"], args.canvas],
  124. ['ThreeWebGL', 'includes_webgl', '', files["webgl"], args.webgl],
  125. ['ThreeExtras', 'includes_extras', 'externs_extras', files["extras"], args.extras]
  126. ];
  127. for (var i = 0,il = config.length;i<il;i++){
  128. var chosenConfig = config[i],
  129. fname_lib = chosenConfig[0],
  130. fname_inc = chosenConfig[1],
  131. fname_externs = chosenConfig[2],
  132. files = chosenConfig[3],
  133. enabled = chosenConfig[4];
  134. if (enabled || args.all){
  135. buildLib(files, debug, minified, fname_lib, fname_externs);
  136. if (args.includes){
  137. buildIncludes(files, fname_inc);
  138. }
  139. }
  140. }
  141. }
  142. main();