更多gulp常用插件使用請訪問:gulp常用插件匯總
gulp-if這是一款條件判斷插件。
注意:與
gulp-if
一起使用時,表現不佳的插件通常會變得更糟。通常,修復不在gulp-if
中。
注意:與lazypipe
一起使用時效果很好,請參見下文
安裝
一鍵安裝不多解釋
npm install --save-dev gulp-if
使用
/**
* @param condition {Boolen} 判斷條件或glob條件
* @param stream condition為true時,執行的任務
* @param elseStream condition為false時,執行的任務
* @param minimatchOptions 如果是GLUB條件,這些選項被傳遞給minimatch
*/
gulpif(condition, stream [, elseStream, [, minimatchOptions]])
1:有條件地過濾內容
var gulpif = require('gulp-if');
var uglify = require('gulp-uglify');
var condition = true; // TODO: add business logic
gulp.task('task', function() {
gulp.src('./src/*.js')
.pipe(gulpif(condition, uglify()))
.pipe(gulp.dest('./dist/'));
});
如果條件為真,則壓縮內容,將所有文件發送到dist文件夾
2:三元過濾器
var gulpif = require('gulp-if');
var uglify = require('gulp-uglify');
var beautify = require('gulp-beautify');
var condition = function (file) {
// TODO: 添加業務邏輯
return true;
}
gulp.task('task', function() {
gulp.src('./src/*.js')
.pipe(gulpif(condition, uglify(), beautify()))
.pipe(gulp.dest('./dist/'));
});
如果條件返回true,則進行壓縮其他對象進行美化,然后所有內容發送到dist文件夾
3:從流中刪除內容
var gulpIgnore = require('gulp-ignore');
var uglify = require('gulp-uglify');
var jshint = require('gulp-jshint');
var condition = './gulpfile.js';
gulp.task('task', function() {
gulp.src('./*.js')
.pipe(jshint())
.pipe(gulpIgnore.exclude(condition))
.pipe(uglify())
.pipe(gulp.dest('./dist/'));
});
對所有內容運行JSHint
,從流中刪除gulpfile
,然后進行丑化並編寫其他所有內容。
4:從流中排除事物
var uglify = require('gulp-uglify');
gulp.task('task', function() {
gulp.src(['./*.js', '!./node_modules/**'])
.pipe(uglify())
.pipe(gulp.dest('./dist/'));
});
抓取所有不在node_modules
文件夾中的JavaScript文件,對其進行丑化處理並將其寫入。這是最快的,因為node_modules
中什么都沒有留下gulp.src()
** 與lazypipe
搭配使用效果很好 **
Lazypipe
創建一個函數,該函數在使用時初始化管道鏈。這使您可以在gulp-if
條件內創建一系列事件。僅當linting
標志為true
時,此方案才會運行jshint
分析和報告程序。
var gulpif = require('gulp-if');
var jshint = require('gulp-jshint');
var uglify = require('gulp-uglify');
var lazypipe = require('lazypipe');
var linting = false;
var compressing = false;
var jshintChannel = lazypipe()
// 添加管道步驟
.pipe(jshint) // 注意流函數尚未被調用!
.pipe(jshint.reporter)
// 添加具有自變量的步驟
.pipe(jshint.reporter, 'fail');
gulp.task('scripts', function () {
return gulp.src(paths.scripts.src)
.pipe(gulpif(linting, jshintChannel()))
.pipe(gulpif(compressing, uglify()))
.pipe(gulp.dest(paths.scripts.dest));
});
** 在lazypipe內部效果很好 **
Lazypipe
假定所有函數參數都是靜態的,如果需要在每個lazypipe
內部實例化gulp-if
參數,則為gulp。通過在惰性管道步驟上傳遞函數可以輕松解決此差異
var gulpif = require('gulp-if');
var jshint = require('gulp-jshint');
var uglify = require('gulp-uglify');
var lazypipe = require('lazypipe');
var compressing = false;
var jsChannel = lazypipe()
// 添加管道步驟
.pipe(jshint) // 注意流函數尚未被調用!
.pipe(jshint.reporter)
// 添加具有自變量的步驟
.pipe(jshint.reporter, 'fail')
// 你不能說 .pipe(gulpif, compressing, uglify)
// 因為丑化需要在每個lazypipe情況下單獨實例化
// 您可以這樣說:
.pipe(function () {
return gulpif(compressing, uglify());
});
// 為什么這樣做有效?lazypipe調用該函數,並傳入no參數,,
// 實例化一個新的gulp-if管道,並將其返回給lazypipe。
gulp.task('scripts', function () {
return gulp.src(paths.scripts.src)
.pipe(jsChannel())
.pipe(gulp.dest(paths.scripts.dest));
});
API
gulpif(condition, stream [, elseStream, [, minimatchOptions]])
gulp-if
會將數據通過管道傳輸到stream
任何condition
真實情況。
如果condition
為false
且elseStream
已傳遞,則數據將通過管道傳遞到elseStream
在數據通過管道傳輸到stream
或elseStream
或兩者都不是之后,數據通過管道傳輸到stream
。
condition
類型:boolean
或stat
對象,或function
需要一個vinyl
文件並返回布爾值或RegularExpression
可以在file.path
condition
參數是gulp-match
支持的任何條件。將file.path
傳遞到中gulp-match
。
如果給出了功能,則該功能會傳遞乙烯基file
。該函數應返回boolean
。stream
gulp-if
的流,以在條件為真時將數據通過管道傳輸到其中。elseStream
可選,當條件為false
時,為gulp-if
提供流傳輸數據。minimatchOptions
可選,如果是全局條件,則將這些選項傳遞給minimatch
。