var gulp = require('gulp'); gulp.task('build', function () { return gulp .src('./sample.js') .pipe(gulp.dest('./build')); });
複製文件完成了,可是它沒有壓縮這個JS文件。要作到這一點,你必須使用一個Gulp插件。在這種狀況下,你可使用gulp-uglify,流行的UglifyJS壓縮編繹插件html
var gulp = require('gulp'); var uglify = require('gulp-uglify'); gulp.task('build', function () { return gulp .src('./sample.js') .pipe(uglify()) .pipe(gulp.dest('./build')); });
流使可讓您添加更多的插件,而只須要讀取和寫入磁盤一次。你也能夠指定緩衝器中內容的大小。須要注意的是,若是你在壓縮以前添加它,那麼你獲得的大小是unminified。node
var gulp = require('gulp'); var uglify = require('gulp-uglify'); var size = require('gulp-size'); gulp.task('build', function () { return gulp .src('./sample.js') .pipe(uglify()) .pipe(size()) .pipe(gulp.dest('./build')); });
Gulp的核心API只有5個,掌握了5個API就學會了Gulp,以後即可以經過管道流組合本身想要的任務。git
gulp.task(name[, deps], fn)
:註冊任務name
是任務名稱;deps
是可選的數組,其中列出須要在本任務運行要執行的任務;fn
是任務體,這是 gulp.js 的核心了,須要花時間吃透它,詳情見此。gulp.src(globs[, options])
:指明源文件路徑globs
必定不會陌生,這裏沒什麼變化;options
是可選的,具體請查看 gulp.js APIgulp.dest(path)
:指明任務處理後的目標輸出路徑gulp.watch(glob[, options], tasks)/gulp.watch(glob[, options, cb])
:監視文件的變化並運行相應的任務。你沒看錯,watch
做爲核心 API 出如今 gulp.js 裏了,具體用法仍是要多看文檔,不過接下來咱們會演示簡單的例子。var gulp = require('gulp'); var jshint = require('gulp-jshint'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); var rename = require('gulp-rename'); // 語法檢查 gulp.task('jshint', function () { return gulp.src('src/*.js') .pipe(jshint()) .pipe(jshint.reporter('default')); }); // 合併文件以後壓縮代碼 gulp.task('minify', function (){ return gulp.src('src/*.js') .pipe(concat('all.js')) .pipe(gulp.dest('dist')) .pipe(uglify()) .pipe(rename('all.min.js')) .pipe(gulp.dest('dist')); }); // 監視文件的變化 gulp.task('watch', function () { gulp.watch('src/*.js', ['jshint', 'minify']); }); // 註冊缺省任務 gulp.task('default', ['jshint', 'minify', 'watch']);
loadNpmTasks
就能夠用了。它能使程序員使用JavaScript構建編繹工具時,幾乎不費吹灰之力。你只須要尋找合適的插件,閱讀它們的文檔,而後安裝和配置它。有基礎足夠大的插件庫,幾乎不須要開發本身的編譯任務。
1.使用 gulp.js,你的構建腳本是代碼,而不是配置文件;程序員
2.使用標準庫(node.js standard library)來編寫腳本;github
3.插件都很簡單,只負責完成一件事-基本上都是 20 行左右的函數;npm
4.任務都以最大的併發數來執行;gulp
5.輸入/輸出(I/O)是基於「流式」的。api