build.main.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const fs = require('fs')
  2. const path = require('path')
  3. const zlib = require('zlib')
  4. const uglify = require('uglify-js')
  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 (config) {
  25. const isProd = /min\.js$/.test(config.dest)
  26. return rollup.rollup(config).then(bundle => {
  27. const code = bundle.generate(config).code
  28. if (isProd) {
  29. var minified = (config.banner ? config.banner + '\n' : '') + uglify.minify(code, {
  30. fromString: true,
  31. output: {
  32. /* eslint-disable camelcase */
  33. screw_ie8: true,
  34. ascii_only: true
  35. /* eslint-enable camelcase */
  36. }
  37. }).code
  38. return write(config.dest, minified, true)
  39. } else {
  40. return write(config.dest, 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. }