Browse Source

use custom stream functions

Evan You 12 years ago
parent
commit
d8e3853209
1 changed files with 53 additions and 19 deletions
  1. 53 19
      tasks/build.js

+ 53 - 19
tasks/build.js

@@ -1,36 +1,70 @@
-var gulp = require('vinyl-fs'),
+var fs = require('vinyl-fs'),
+    zlib = require('zlib'),
+    uglifyjs = require('uglify-js'),
     component = require('gulp-component'),
     component = require('gulp-component'),
-    rename = require('gulp-rename'),
-    uglify = require('gulp-uglify'),
-    header = require('gulp-header'),
-    gzip   = require('gulp-gzip')
+    map = require('map-stream')
 
 
-var dest = './dist'
-
-var headerTemplate =
+var dest = './dist',
+    headerText,
+    headerTemplate =
     '/*\n' +
     '/*\n' +
     ' VueJS v{{version}}\n' +
     ' VueJS v{{version}}\n' +
     ' (c) 2013 Evan You\n' +
     ' (c) 2013 Evan You\n' +
     ' License: MIT\n' +
     ' License: MIT\n' +
-    '*/'
+    '*/\n'
 
 
 module.exports = function (grunt) {
 module.exports = function (grunt) {
     grunt.registerTask('build', function (version) {
     grunt.registerTask('build', function (version) {
+
         version = version || grunt.config.get('version')
         version = version || grunt.config.get('version')
-        var headerText = headerTemplate.replace(/{{version}}/, version)
-        gulp.src('./component.json')
+        headerText = headerTemplate.replace(/{{version}}/, version)
+
+        fs.src('./component.json')
             .pipe(component.scripts({
             .pipe(component.scripts({
                 standalone: 'Vue',
                 standalone: 'Vue',
                 name: 'vue'
                 name: 'vue'
             }))
             }))
-            .pipe(header(headerText))
-            .pipe(gulp.dest(dest))
-            .pipe(uglify())
-            .pipe(header(headerText))
-            .pipe(rename('vue.min.js'))
-            .pipe(gulp.dest(dest))
-            .pipe(gzip())
-            .pipe(gulp.dest(dest))
+            .pipe(map(header))
+            .pipe(fs.dest(dest))
+            .pipe(map(size))
+            .pipe(map(uglify))
+            .pipe(map(header))
+            .pipe(map(rename))
+            .pipe(fs.dest(dest))
+            .pipe(map(size))
+            .pipe(map(gzip))
+            .pipe(fs.dest(dest))
+            .pipe(map(size))
             .on('end', this.async())
             .on('end', this.async())
+
+    })
+}
+
+function rename (file, cb) {
+    file.path = file.base + 'vue.min.js'
+    cb(null, file)
+}
+
+function header (file, cb) {
+    file.contents = Buffer.concat([new Buffer(headerText), file.contents])
+    cb(null, file)
+}
+
+function uglify (file, cb) {
+    file.contents = new Buffer(uglifyjs.minify(file.contents.toString(), {
+        fromString: true
+    }).code)
+    cb(null, file)
+}
+
+function gzip (file, cb) {
+    zlib.gzip(file.contents, function (err, buf) {
+        file.contents = buf
+        cb(err, file)
     })
     })
+}
+
+function size (file, cb) {
+    console.log(file.relative + ': ' + (file.contents.length / 1024).toFixed(2) + 'kb')
+    cb(null, file)
 }
 }