build.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. const fs = require('fs');
  2. const path = require('path');
  3. const zlib = require('zlib');
  4. const rollup = require('rollup');
  5. const terser = require('terser');
  6. let builds = require('./config').getAllBuilds();
  7. build(builds);
  8. function build(builds) {
  9. let built = 0;
  10. const total = builds.length;
  11. const next = () => {
  12. buildEntry(builds[built]).then(() => {
  13. built++;
  14. if (built < total) {
  15. next()
  16. }
  17. }).catch(logError)
  18. };
  19. next()
  20. }
  21. function buildEntry(config) {
  22. const output = config.output;
  23. const {file, banner} = output;
  24. const isProd = /\.min\./.test(file);
  25. return rollup.rollup(config)
  26. .then(bundle => bundle.generate(output))
  27. .then(({output: [{code}]}) => {
  28. if (isProd) {
  29. const minified = (banner ? banner + '\n' : '') + terser.minify(code, {
  30. toplevel: true,
  31. output: {
  32. ascii_only: true
  33. },
  34. compress: {
  35. pure_funcs: ['makeMap']
  36. }
  37. }).code;
  38. return write(file, minified, true)
  39. } else {
  40. return write(file, code)
  41. }
  42. })
  43. }
  44. function write(dest, code, zip) {
  45. return new Promise((resolve, reject) => {
  46. function report(extra) {
  47. console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''));
  48. resolve()
  49. }
  50. fs.writeFile(dest, code, err => {
  51. if (err) return reject(err);
  52. if (zip) {
  53. zlib.gzip(code, (err, zipped) => {
  54. if (err) return reject(err);
  55. report(' (gzipped: ' + getSize(zipped) + ')')
  56. })
  57. } else {
  58. report()
  59. }
  60. })
  61. })
  62. }
  63. function getSize(code) {
  64. return (code.length / 1024).toFixed(2) + 'kb'
  65. }
  66. function logError(e) {
  67. console.log(e)
  68. }
  69. function blue(str) {
  70. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  71. }