build.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. var fs = require('fs');
  2. var rollup = require('rollup');
  3. var uglify = require('uglify-js');
  4. var babel = require('rollup-plugin-babel');
  5. var execSync = require('child_process').execSync;
  6. bundle({
  7. minified: 'dist/jspdf.min.js',
  8. debug: 'dist/jspdf.debug.js'
  9. });
  10. // Monkey patching adler32 and filesaver
  11. function monkeyPatch() {
  12. return {
  13. transform: function (code, id) {
  14. var file = id.split('/').pop();
  15. if (file === 'adler32cs.js') {
  16. code = code.replace(/this, function/g, 'jsPDF, function');
  17. code = code.replace(/require\('buffer'\)/g, '{}');
  18. }
  19. return code;
  20. }
  21. }
  22. }
  23. // Rollup removes local variables unless used within a module.
  24. // This plugin makes sure specified local variables are preserved
  25. // and kept local. This plugin wouldn't be necessary if es2015
  26. // modules would be used.
  27. function rawjs(opts) {
  28. opts = opts || {};
  29. return {
  30. transform: function (code, id) {
  31. var variable = opts[id.split('/').pop()];
  32. if (!variable) return code;
  33. var keepStr = '/*rollup-keeper-start*/window.tmp=' + variable + ';/*rollup-keeper-end*/';
  34. return code + keepStr;
  35. },
  36. transformBundle: function (code) {
  37. for (var file in opts) {
  38. var r = new RegExp(opts[file] + '\\$\\d+', 'g');
  39. code = code.replace(r, opts[file]);
  40. }
  41. var re = /\/\*rollup-keeper-start\*\/.*\/\*rollup-keeper-end\*\//g;
  42. return code.replace(re, '');
  43. }
  44. }
  45. }
  46. function bundle(paths) {
  47. rollup.rollup({
  48. entry: './main.js',
  49. plugins: [
  50. monkeyPatch(),
  51. rawjs({
  52. 'jspdf.js': 'jsPDF',
  53. 'filesaver.tmp.js': 'saveAs',
  54. 'deflate.js': 'Deflater',
  55. 'zlib.js': 'FlateStream',
  56. 'css_colors.js': 'CssColors',
  57. 'html2pdf.js': 'html2pdf'
  58. }),
  59. babel({
  60. presets: ['es2015-rollup'],
  61. exclude: ['node_modules/**', 'libs/**']
  62. })
  63. ]
  64. }).then(function (bundle) {
  65. var code = bundle.generate({format: 'umd', moduleName: 'jspdf'}).code;
  66. code = code.replace(/Permission\s+is\s+hereby\s+granted[\S\s]+?IN\s+THE\s+SOFTWARE\./, 'Licensed under the MIT License');
  67. code = code.replace(/Permission\s+is\s+hereby\s+granted[\S\s]+?IN\s+THE\s+SOFTWARE\./g, '');
  68. fs.writeFileSync(paths.debug, renew(code));
  69. var minified = uglify.minify(code, {fromString: true, output: {comments: /@preserve|@license|copyright/i}});
  70. fs.writeFileSync(paths.minified, renew(minified.code));
  71. }).catch(function (err) {
  72. console.error(err);
  73. });
  74. }
  75. function renew(code) {
  76. var date = new Date().toISOString();
  77. var version = require('./package.json').version;
  78. var whoami = execSync('whoami').toString().trim();
  79. var commit = execSync('git rev-parse --short=10 HEAD').toString().trim();
  80. code = code.replace('${versionID}', version + ' Built on ' + date);
  81. code = code.replace('${commitID}', commit);
  82. code = code.replace(/1\.0\.0-trunk/, version + ' ' + date + ':' + whoami);
  83. return code;
  84. }