簡體   English   中英

如果文件丟失,如何使 Gulp.src 失敗?

[英]How to make Gulp.src fail if a file is missing?

我們的 gulp 構建需要一堆用 bower 安裝的庫,然后將它們與我們分布在多個目錄中的所有代碼連接起來。 這是它的樣子:

  var jsFiles = [
    sourcePath + '/config/config.js',
    sourcePath + '/vendor/jquery/dist/jquery.js',
    sourcePath + '/vendor/js-cookie/src/js.cookie.js',
    sourcePath + '/vendor/modernizr/modernizr.js',
    sourcePath + '/vendor/lodash/lodash.js',
    sourcePath + '/vendor/picturefill/dist/picturefill.min.js',
    sourcePath + '/templates/**/*.js',
    sourcePath + '/pages/**/*.js'
  ],

gulp.task('build:js', ['jscs'], function() {
  return gulp.src(jsFiles)
  .pipe(concat('scripts.js'))
  .pipe(gulpif(isProd, uglify()))
  .pipe(gulp.dest(outputPath + '/webresources/js'));
});

我們的問題是,每當有人添加新庫時,其他開發人員如果沒有運行bower install來獲取新組件,就會遇到問題。 scripts.js在沒有它們的情況下構建,因為它不會介意其中一個 glob 返回空,即使它是一個命名文件。

這應該如何解決? 如果 glob 返回零結果,有沒有辦法拋出錯誤?

由於似乎沒有現成的解決方案,因此我編寫了一個模塊來滿足我們的需求。

files-exist模塊允許您檢查數組中的所有文件是否都存在,如果缺少則拋出錯誤。 它在成功時返回一個相同的數組,因此很容易放置到位。

  var jsFiles = [
    sourcePath + '/config/config.js',
    sourcePath + '/vendor/jquery/dist/jquery.js',
    sourcePath + '/vendor/js-cookie/src/js.cookie.js',
    sourcePath + '/vendor/modernizr/modernizr.js',
    sourcePath + '/vendor/lodash/lodash.js',
    sourcePath + '/vendor/picturefill/dist/picturefill.min.js',
    sourcePath + '/templates/**/*.js',
    sourcePath + '/pages/**/*.js'
  ],

filesExist = require('files-exist'),

gulp.task('build:js', ['jscs'], function() {
  return gulp.src(filesExist(jsFiles)) // Throws error if a file is missing
  .pipe(concat('scripts.js'))
  .pipe(gulpif(isProd, uglify()))
  .pipe(gulp.dest(outputPath + '/webresources/js'));
});

我用過這個包 IsThere

https://www.npmjs.com/package/is-there

前任。

PATHS:
    javascriptCopyNodeModules:
    # - "node_modules/name.min.js"

import IsThere  from 'is-there';

function javascriptCopyNodeModules() {
   if(IsThere(PATHS.javascriptCopyNodeModules)){
      return gulp.src(PATHS.javascriptCopyNodeModules)
        .pipe(gulp.dest(PATHS.dist + '/assets/js/node_modules'));
    }else{     
      return gulp.src('.');
   }
}

因為 PATHS.javascriptCopyNodeModules 是空的 (#) 不返回任何內容。

路徑:javascriptCopyNodeModules:#-“node_modules/name.min.js”

從'is-there'導入IsThere;

function javascriptCopyNodeModules() { if(IsThere(PATHS.javascriptCopyNodeModules)){ return gulp.src(PATHS.javascriptCopyNodeModules) .pipe(gulp.dest(PATHS.dist + '/assets/js/node_modules')); }else{ return gulp.src('path_of_file'); } }

您可以使用gulp-plumber插件來在構建時出錯。

舉例說明:

第 1 步:安裝 gulp-plumber:

npm i --save-dev gulp-plumber 

第 2 步:在 gulpfile 中需要 gulp plmber 模塊:

...
var plumber = require('gulp-plumber'),
...   

第 3 步:使用

gulp.task('concatFiles', function (done) {
    
    gulp.src(['../a.js', '../b.js', '../c.js'])
        .pipe(plumber())
        .pipe(concat('destination.js'))
        .pipe(plumber.stop())
        .pipe(gulp.dest('dist/js'));

    done(); // a callback required in gulp 4
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM