build.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #!/usr/bin/env node
  2. var fs = require('fs');
  3. var path = require('path');
  4. var querystring = require('querystring');
  5. var child_process = require('child_process');
  6. var browserify = path.resolve(path.join('node_modules', '.bin', 'browserify'));
  7. var webpack = path.resolve(path.join('node_modules', '.bin', 'webpack'));
  8. var coffee = path.resolve(path.join('node_modules', '.bin', 'coffee'));
  9. function run(command, callback) {
  10. console.log(command);
  11. child_process.exec(command, callback);
  12. }
  13. // Use browserify to package up source-map-support.js
  14. fs.writeFileSync('.temp.js', 'sourceMapSupport = require("./source-map-support");');
  15. run(browserify + ' .temp.js', function(error, stdout) {
  16. if (error) throw error;
  17. // Wrap the code so it works both as a normal <script> module and as an AMD module
  18. var header = [
  19. '/*',
  20. ' * Support for source maps in V8 stack traces',
  21. ' * https://github.com/evanw/node-source-map-support',
  22. ' */',
  23. ].join('\n');
  24. var code = [
  25. '(this["define"] || function(name, callback) { this["sourceMapSupport"] = callback(); })("browser-source-map-support", function(sourceMapSupport) {',
  26. stdout.replace(/\bbyte\b/g, 'bite').replace(new RegExp(__dirname + '/', 'g'), '').replace(/@license/g, 'license'),
  27. 'return sourceMapSupport});',
  28. ].join('\n');
  29. // Use the online Google Closure Compiler service for minification
  30. fs.writeFileSync('.temp.js', querystring.stringify({
  31. compilation_level: 'SIMPLE_OPTIMIZATIONS',
  32. output_info: 'compiled_code',
  33. output_format: 'text',
  34. js_code: code
  35. }));
  36. run('curl -d @.temp.js "http://closure-compiler.appspot.com/compile"', function(error, stdout) {
  37. if (error) throw error;
  38. var code = header + '\n' + stdout;
  39. fs.unlinkSync('.temp.js');
  40. fs.writeFileSync('browser-source-map-support.js', code);
  41. fs.writeFileSync('amd-test/browser-source-map-support.js', code);
  42. });
  43. });
  44. // Build the AMD test
  45. run(coffee + ' --map --compile amd-test/script.coffee', function(error) {
  46. if (error) throw error;
  47. });
  48. // Build the browserify test
  49. run(coffee + ' --map --compile browserify-test/script.coffee', function(error) {
  50. if (error) throw error;
  51. run(browserify + ' --debug browserify-test/script.js > browserify-test/compiled.js', function(error) {
  52. if (error) throw error;
  53. })
  54. });
  55. // Build the browser test
  56. run(coffee + ' --map --compile browser-test/script.coffee', function(error) {
  57. if (error) throw error;
  58. });
  59. // Build the header test
  60. run(coffee + ' --map --compile header-test/script.coffee', function(error) {
  61. if (error) throw error;
  62. var contents = fs.readFileSync('header-test/script.js', 'utf8');
  63. fs.writeFileSync('header-test/script.js', contents.replace(/\/\/# sourceMappingURL=.*/g, ''))
  64. });
  65. // Build the webpack test
  66. child_process.exec(webpack, {cwd: 'webpack-test'}, function(error) {
  67. if (error) throw error;
  68. });