build.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * Build, update component.json, uglify, and report size.
  3. */
  4. module.exports = function (grunt) {
  5. grunt.registerTask('build', function () {
  6. var done = this.async()
  7. var fs = require('fs')
  8. var zlib = require('zlib')
  9. var webpack = require('webpack')
  10. var uglifyjs = require('uglify-js')
  11. var banner =
  12. '/**\n' +
  13. ' * Vue.js v' + grunt.config.get('version') + '\n' +
  14. ' * (c) ' + new Date().getFullYear() + ' Evan You\n' +
  15. ' * Released under the MIT License.\n' +
  16. ' */\n'
  17. // build
  18. webpack({
  19. entry: './src/vue',
  20. output: {
  21. path: './dist',
  22. filename: 'vue.js',
  23. library: 'Vue',
  24. libraryTarget: 'umd'
  25. },
  26. plugins: [
  27. new webpack.BannerPlugin(banner, { raw: true })
  28. ]
  29. }, function (err, stats) {
  30. if (err) return done(err)
  31. minify()
  32. })
  33. function minify () {
  34. var js = fs.readFileSync('dist/vue.js', 'utf-8')
  35. report('dist/vue.js', js)
  36. // uglify
  37. var result = uglifyjs.minify(js, {
  38. fromString: true,
  39. output: {
  40. comments: /License/
  41. },
  42. compress: {
  43. pure_funcs: [
  44. 'require',
  45. '_.log',
  46. '_.warn',
  47. '_.assertAsset',
  48. 'enableDebug'
  49. ]
  50. }
  51. })
  52. // var min = grunt.config.get('banner') + result.code
  53. write('dist/vue.min.js', result.code)
  54. // report gzip size
  55. zlib.gzip(result.code, function (err, buf) {
  56. write('dist/vue.min.js.gz', buf)
  57. done(err)
  58. })
  59. }
  60. function write (path, file) {
  61. fs.writeFileSync(path, file)
  62. report(path, file)
  63. }
  64. function report (path, file) {
  65. console.log(
  66. blue(path + ': ') +
  67. (file.length / 1024).toFixed(2) + 'kb'
  68. )
  69. }
  70. function blue (str) {
  71. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  72. }
  73. })
  74. }