2
0

build.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. const fs = require('fs')
  2. const path = require('path')
  3. const zlib = require('zlib')
  4. const rollup = require('rollup')
  5. const uglify = require('uglify-js')
  6. if (!fs.existsSync('dist')) {
  7. fs.mkdirSync('dist')
  8. }
  9. // Update main file
  10. const version = process.env.VERSION || require('../package.json').version
  11. const main = fs
  12. .readFileSync('src/core/index.js', 'utf-8')
  13. .replace(/Vue\.version = '[^']+'/, "Vue.version = '" + version + "'")
  14. fs.writeFileSync('src/core/index.js', main)
  15. let builds = require('./config').getAllBuilds()
  16. // filter builds via command line arg
  17. if (process.argv[2]) {
  18. const filters = process.argv[2].split(',')
  19. builds = builds.filter(b => {
  20. return filters.some(f => b.dest.indexOf(f) > -1)
  21. })
  22. }
  23. build(builds)
  24. function build (builds) {
  25. let built = 0
  26. const total = builds.length
  27. const next = () => {
  28. buildEntry(builds[built]).then(() => {
  29. built++
  30. if (built < total) {
  31. next()
  32. }
  33. }).catch(logError)
  34. }
  35. next()
  36. }
  37. function buildEntry (config) {
  38. const isProd = /min\.js$/.test(config.dest)
  39. return rollup.rollup(config).then(bundle => {
  40. const code = bundle.generate(config).code
  41. if (isProd) {
  42. var minified = (config.banner ? config.banner + '\n' : '') + uglify.minify(code, {
  43. fromString: true,
  44. output: {
  45. screw_ie8: true,
  46. ascii_only: true
  47. },
  48. compress: {
  49. pure_funcs: ['makeMap']
  50. }
  51. }).code
  52. return write(config.dest, minified).then(zip(config.dest))
  53. } else {
  54. return write(config.dest, code)
  55. }
  56. })
  57. }
  58. function write (dest, code) {
  59. return new Promise(function (resolve, reject) {
  60. fs.writeFile(dest, code, function (err) {
  61. if (err) return reject(err)
  62. console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code))
  63. resolve()
  64. })
  65. })
  66. }
  67. function zip (file) {
  68. return function () {
  69. return new Promise(function (resolve, reject) {
  70. fs.readFile(file, function (err, buf) {
  71. if (err) return reject(err)
  72. zlib.gzip(buf, function (err, buf) {
  73. if (err) return reject(err)
  74. write(file + '.gz', buf).then(resolve)
  75. })
  76. })
  77. })
  78. }
  79. }
  80. function getSize (code) {
  81. return (code.length / 1024).toFixed(2) + 'kb'
  82. }
  83. function logError (e) {
  84. console.log(e)
  85. }
  86. function blue (str) {
  87. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  88. }