gulp常用插件之gulp-if使用


更多gulp常用插件使用請訪問:gulp常用插件匯總


gulp-if這是一款條件判斷插件。

注意:gulp-if一起使用時,表現不佳的插件通常會變得更糟。通常,修復不在gulp-if中。
注意:lazypipe一起使用時效果很好,請參見下文

更多使用文檔請點擊訪問gulp-if工具官網

安裝

一鍵安裝不多解釋

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真實情況。
如果conditionfalseelseStream已傳遞,則數據將通過管道傳遞到elseStream
在數據通過管道傳輸到streamelseStream或兩者都不是之后,數據通過管道傳輸到stream

  • condition
    類型:booleanstat對象,或function需要一個vinyl文件並返回布爾值或RegularExpression可以在file.path
    condition參數是gulp-match支持的任何條件。將file.path傳遞到中gulp-match
    如果給出了功能,則該功能會傳遞乙烯基file。該函數應返回boolean
  • stream
    gulp-if的流,以在條件為真時將數據通過管道傳輸到其中。
  • elseStream
    可選,當條件為false時,為gulp-if提供流傳輸數據。
  • minimatchOptions
    可選,如果是全局條件,則將這些選項傳遞給minimatch


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM