原文來(lái)自:http://www.itdecent.cn/p/9482673e09b9
gulp 借鑒了 Unix 操作系統(tǒng)的管道(pipe)思想,前一級(jí)的輸出,直接變成后一級(jí)的輸入
一、輸入流
獲取當(dāng)前文件流存儲(chǔ)于管道
gulp.src(globs[, options])
globs:需要處理的源文件匹配符路徑。
使用具體路徑
獲取 js 目錄下 app.js 文件
gulp.src("js/app.js")
使用通配符
通配符路徑匹配規(guī)則:
描述
- 匹配所有文件
例:js/.js,匹配 js 目錄下所有 js 文件
** 匹配0個(gè)或者多個(gè)子文件夾
例:view//.html,匹配 view 目錄下及其子目錄下所有的 html 文件
{} 匹配多個(gè)屬性
例1:js/{a,b}.js,匹配 js 目錄下 a.js 及 b.js 兩文件
例2:images/*.{jpg,png,gif},匹配 images 目錄下所有jpg/png/gif文件
! 排除文件
例:!less/test.less,排除 less 目錄下的 test.less 文件
組合使用
獲取 less 目錄下的所有 .less 文件,但是排除 test.less 文件
gulp.src(['less/*/.less', '!less/test.less']);
options:有三個(gè)屬性可以設(shè)置 buffer、read、base
名稱(chēng) 類(lèi)型 默認(rèn)值 描述
options.buffer Boolean true 如果設(shè)置為false,那么將會(huì)以stream方式返回,而不是文件的buffer形式。這在處理一些大文件時(shí)將會(huì)很有用。
options.read Boolean true 如果設(shè)置為false,那么會(huì)返回空值,也就是不會(huì)去讀取文件。
options.base String 設(shè)置輸出路徑的基礎(chǔ)目錄,具體用法參考后面的示例
二、輸出流
輸出文件流至指定路徑(流可以從管道中獲?。绻募A不存在,將會(huì)自動(dòng)創(chuàng)建。
gulp.dest(path[, options])
path:文件輸出目錄,也可以傳遞一個(gè)函數(shù),在函數(shù)中返回一個(gè)路徑。
options:有兩個(gè)屬性可以設(shè)置 cwd、mode
名稱(chēng) 類(lèi)型 默認(rèn)值 說(shuō)明
options.cwd String process.cwd() 輸出目錄的cwd參數(shù),只在所給的輸出目錄是相對(duì)路徑時(shí)有效
options.mode String 0777 定義所有在輸出目錄中所創(chuàng)建的目錄的權(quán)限
例:將 src/js 目錄下所有的 js 文件全部復(fù)制至 build/js 目錄
gulp.src("./src/js/*.js")
.pipe(gulp.dest("./build/js"))
假設(shè),src/asset/js/ 目錄下存放項(xiàng)目的 js 文件,現(xiàn)在進(jìn)行項(xiàng)目打包,需要將所有的 js 文件移動(dòng)至 build/asset/js 目錄下,那么應(yīng)該怎么實(shí)現(xiàn)
以 src/asset/js/common/app.js 文件為例
第一步:獲取指定目錄下所有文件
gulp.src("src/asset/js/*/.js")
第二步:輸出至指定目錄
輸出目錄該寫(xiě)什么?build?build/asset?build/asset/js?
gulp.dest("build") // 寫(xiě)入 'build/common/app.js'
gulp.dest("build/asset") // 寫(xiě)入 'build/asset/common/app.js'
gulp.dest("build/asset/js") // 寫(xiě)入 'build/asset/js/common/app.js'
可以看出,最終的輸出路徑,是 dest 方法定義的輸出路徑 + src 方法匹配路徑。其實(shí)這都是 src 方法中的 option.base 屬性的作用。
gulp.src('src/asset/js/*/.js') // 獲取文件流,并且設(shè)置 base 為 src/ex2,匹配路徑為 common/app.js
.pipe(gulp.dest("build")); // 寫(xiě)入 'build/js/app.js'
gulp.src('src/asset/js/*/.js', {base: 'src'}) // 獲取文件流,并且設(shè)置 base 為 src,匹配路徑為 asset/js/common/app.js
.pipe(gulp.dest("build")); // 寫(xiě)入 'build/ex2/js/app.js'
三、監(jiān)聽(tīng)器
監(jiān)視文件,并且可以在文件發(fā)生改動(dòng)時(shí)做一些事情
gulp.watch(glob[, opts], tasks);
或者
gulp.watch(glob[, opts, cb]);
例1:監(jiān)視 src/js 目錄下所有的 js 文件,如果發(fā)生改動(dòng),則調(diào)用 js 任務(wù),自動(dòng)將文件復(fù)制至 build 目錄下
gulp.watch('src/js/*/.js', ['js']);
最后提供一下綜合示例
源碼目錄:src,其中,src/asset/js 目錄存放 js 文件,
輸出目錄:build
將源碼目錄中的所有 js 文件打包至輸出目錄,并且當(dāng)有 js 文件發(fā)生變更時(shí),執(zhí)行自動(dòng)打包動(dòng)作
var gulp = require('gulp');
gulp.task('js', function() {
gulp.src('src/asset/js/*/.js', {base: "src"})
.pipe(gulp.dest("build"));
})
gulp.task('default', ['js'], function() {
gulp.watch('src/asset/js/*/.js', ['js']);
})