build.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. module.exports = function (grunt) {
  2. grunt.registerTask('build', function () {
  3. var done = this.async()
  4. var fs = require('fs')
  5. var zlib = require('zlib')
  6. var build = require('../shared-build')
  7. var uglifyjs = require('uglify-js')
  8. // update component.json first
  9. var jsRE = /\.js$/
  10. var component = grunt.file.readJSON('component.json')
  11. component.scripts = []
  12. grunt.file.recurse('src', function (file) {
  13. if (jsRE.test(file)) {
  14. component.scripts.push(file)
  15. }
  16. })
  17. grunt.file.write('component.json', JSON.stringify(component, null, 2))
  18. // then build
  19. build(grunt, function (js) {
  20. write('dist/vue.js', js)
  21. // uglify
  22. var min = uglifyjs.minify(js, {
  23. fromString: true,
  24. compress: {
  25. pure_funcs: [
  26. 'require',
  27. '_.log',
  28. '_.warn',
  29. '_.assertAsset',
  30. 'enableDebug'
  31. ]
  32. }
  33. }).code
  34. min = grunt.config.get('banner') + min
  35. write('dist/vue.min.js', min)
  36. // report gzip size
  37. zlib.gzip(min, function (err, buf) {
  38. write('dist/vue.min.js.gz', buf)
  39. done()
  40. })
  41. })
  42. function write (path, file) {
  43. fs.writeFileSync(path, file)
  44. console.log(
  45. blue(path + ': ') +
  46. (file.length / 1024).toFixed(2) + 'kb'
  47. )
  48. }
  49. function blue (str) {
  50. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  51. }
  52. })
  53. }