build.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. var fs = require('vinyl-fs'),
  2. zlib = require('zlib'),
  3. uglifyjs = require('uglify-js'),
  4. component = require('gulp-component'),
  5. map = require('map-stream')
  6. var dest = './dist',
  7. headerText,
  8. headerTemplate =
  9. '/*\n' +
  10. ' Vue.js v{{version}}\n' +
  11. ' (c) ' + new Date().getFullYear() + ' Evan You\n' +
  12. ' License: MIT\n' +
  13. '*/\n'
  14. module.exports = function (grunt) {
  15. grunt.registerTask('build', function (version) {
  16. version = version || grunt.config.get('version')
  17. headerText = headerTemplate.replace(/{{version}}/, version)
  18. fs.src('./component.json')
  19. .pipe(component.scripts({
  20. standalone: 'Vue',
  21. name: 'vue'
  22. }))
  23. .pipe(map(header))
  24. .pipe(fs.dest(dest))
  25. .pipe(map(size))
  26. .pipe(map(uglify))
  27. .pipe(map(header))
  28. .pipe(map(rename))
  29. .pipe(fs.dest(dest))
  30. .pipe(map(size))
  31. .pipe(map(gzip))
  32. .pipe(fs.dest(dest))
  33. .pipe(map(size))
  34. .on('end', this.async())
  35. })
  36. }
  37. function rename (file, cb) {
  38. file.path = file.base + '/vue.min.js'
  39. cb(null, file)
  40. }
  41. function header (file, cb) {
  42. file.contents = Buffer.concat([new Buffer(headerText), file.contents])
  43. cb(null, file)
  44. }
  45. function uglify (file, cb) {
  46. file.contents = new Buffer(uglifyjs.minify(file.contents.toString(), {
  47. fromString: true
  48. }).code)
  49. cb(null, file)
  50. }
  51. function gzip (file, cb) {
  52. zlib.gzip(file.contents, function (err, buf) {
  53. file.contents = buf
  54. file.path = file.path + '.gz'
  55. cb(err, file)
  56. })
  57. }
  58. function size (file, cb) {
  59. console.log(blue(dest + '/' + file.relative + ': ') + (file.contents.length / 1024).toFixed(2) + 'kb')
  60. cb(null, file)
  61. }
  62. function blue (str) {
  63. return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  64. }