build.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * Build 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 devConfig = require('../webpack.build.dev.config')
  11. var prodConfig = require('../webpack.build.prod.config')
  12. webpack(devConfig, function (err, stats) {
  13. if (err) return done(err)
  14. report('dist/vue.js')
  15. webpack(prodConfig, function (err, stats) {
  16. if (err) return done(err)
  17. report('dist/vue.min.js')
  18. zip()
  19. })
  20. })
  21. function zip () {
  22. fs.readFile('dist/vue.min.js', function (err, buf) {
  23. if (err) return done(err)
  24. zlib.gzip(buf, function (err, buf) {
  25. if (err) return done(err)
  26. report('dist/vue.min.js.gz', buf)
  27. fs.writeFile('dist/vue.min.js.gz', buf, done)
  28. })
  29. })
  30. }
  31. function report (path, file) {
  32. if (!file) {
  33. file = fs.readFileSync(path)
  34. }
  35. console.log(
  36. blue(path + ': ') +
  37. (file.length / 1024).toFixed(2) + 'kb'
  38. )
  39. }
  40. function blue (str) {
  41. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  42. }
  43. })
  44. }