build.main.js 1.9 KB

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