# 增量編譯打包,包括處理整所涉及的所有文件
在做增量編譯打包的時候,有一個比較麻煩的事情,那就是你常常希望操作的是 _所有_ 處理過的文件,而不僅僅是單個的文件。舉個例子,你想要只對更改的文件做代碼 lint 操作,以及一些模塊封裝的操作,然后將他們與其他已經 lint 過的,以及已經進行過模塊封裝的文件合并到一起。如果不用到臨時文件的話,這將會非常困難。
使用 [gulp-cached](https://github.com/wearefractal/gulp-cached) 以及 [gulp-remember](https://github.com/ahaurw01/gulp-remember) 來解決這個問題。
```
var gulp = require('gulp');
var header = require('gulp-header');
var footer = require('gulp-footer');
var concat = require('gulp-concat');
var jshint = require('gulp-jshint');
var cached = require('gulp-cached');
var remember = require('gulp-remember');
var scriptsGlob = 'src/**/*.js';
gulp.task('scripts', function() {
return gulp.src(scriptsGlob)
.pipe(cached('scripts')) // 只傳遞更改過的文件
.pipe(jshint()) // 對這些更改過的文件做一些特殊的處理...
.pipe(header('(function () {')) // 比如 jshinting ^^^
.pipe(footer('})();')) // 增加一些類似模塊封裝的東西
.pipe(remember('scripts')) // 把所有的文件放回 stream
.pipe(concat('app.js')) // 做一些需要所有文件的操作
.pipe(gulp.dest('public/'));
});
gulp.task('watch', function () {
var watcher = gulp.watch(scriptsGlob, ['scripts']); // 監視與 scripts 任務中同樣的文件
watcher.on('change', function (event) {
if (event.type === 'deleted') { // 如果一個文件被刪除了,則將其忘記
delete cached.caches.scripts[event.path]; // gulp-cached 的刪除 api
remember.forget('scripts', event.path); // gulp-remember 的刪除 api
}
});
});
```
- gulp 中文文檔
- 入門指南
- gulp API 文檔
- 編寫插件
- 指導
- 使用 buffer
- 使用 Stream 處理
- 測試
- FAQ
- gulp 技巧集
- 整合 streams 來處理錯誤
- 刪除文件和文件夾
- 使用 watchify 加速 browserify 編譯
- 增量編譯打包,包括處理整所涉及的所有文件
- 將 buffer 變為 stream (內存中的內容)
- 在 gulp 中運行 Mocha 測試
- 僅僅傳遞更改過的文件
- 從命令行傳遞參數
- 只重新編譯被更改過的文件
- 每個文件夾生成單獨一個文件
- 串行方式運行任務,亦即,任務依賴
- 擁有實時重載(live-reloading)和 CSS 注入的服務器
- 通過 stream 工廠來共享 stream
- 指定一個新的 cwd (當前工作目錄)
- 分離任務到多個文件中
- 使用外部配置文件
- 在一個任務中使用多個文件來源
- Browserify + Uglify2 和 sourcemaps
- Browserify + Globs
- 同時輸出一個壓縮過和一個未壓縮版本的文件
- 改變版本號以及創建一個 git tag
- Swig 以及 YAML front-matter 模板