build.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. // update weex subversion
  16. const weexVersion = process.env.WEEX_VERSION || require('../packages/weex-vue-framework/package.json').version
  17. const weexMain = fs
  18. .readFileSync('src/entries/weex-framework.js', 'utf-8')
  19. .replace(/Vue\.version = '[^']+'/, "Vue.version = '" + weexVersion + "'")
  20. fs.writeFileSync('src/entries/weex-framework.js', weexMain)
  21. let builds = require('./config').getAllBuilds()
  22. // filter builds via command line arg
  23. if (process.argv[2]) {
  24. const filters = process.argv[2].split(',')
  25. builds = builds.filter(b => {
  26. return filters.some(f => b.dest.indexOf(f) > -1)
  27. })
  28. } else {
  29. // filter out weex builds by default
  30. builds = builds.filter(b => {
  31. return b.dest.indexOf('weex') === -1
  32. })
  33. }
  34. build(builds)
  35. function build (builds) {
  36. let built = 0
  37. const total = builds.length
  38. const next = () => {
  39. buildEntry(builds[built]).then(() => {
  40. built++
  41. if (built < total) {
  42. next()
  43. }
  44. }).catch(logError)
  45. }
  46. next()
  47. }
  48. function buildEntry (config) {
  49. const isProd = /min\.js$/.test(config.dest)
  50. return rollup.rollup(config).then(bundle => {
  51. const code = bundle.generate(config).code
  52. if (isProd) {
  53. var minified = (config.banner ? config.banner + '\n' : '') + uglify.minify(code, {
  54. fromString: true,
  55. output: {
  56. screw_ie8: true,
  57. ascii_only: true
  58. },
  59. compress: {
  60. pure_funcs: ['makeMap']
  61. }
  62. }).code
  63. return write(config.dest, minified, true)
  64. } else {
  65. return write(config.dest, code)
  66. }
  67. })
  68. }
  69. function write (dest, code, zip) {
  70. return new Promise((resolve, reject) => {
  71. function report (extra) {
  72. console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''))
  73. resolve()
  74. }
  75. fs.writeFile(dest, code, err => {
  76. if (err) return reject(err)
  77. if (zip) {
  78. zlib.gzip(code, (err, zipped) => {
  79. if (err) return reject(err)
  80. report(' (gzipped: ' + getSize(zipped) + ')')
  81. })
  82. } else {
  83. report()
  84. }
  85. })
  86. })
  87. }
  88. function getSize (code) {
  89. return (code.length / 1024).toFixed(2) + 'kb'
  90. }
  91. function logError (e) {
  92. console.log(e)
  93. }
  94. function blue (str) {
  95. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  96. }