2015-10-19 16 views
7

私たちのgulpビルドは、bowerと一緒にインストールされたライブラリの束を取り、複数のディレクトリに分散したすべてのコードと連結します。ここでは次のようになります。ファイルが見つからない場合にGulp.srcを失敗させるには?

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の1つが空を返すのに気にならないので、それらを除いて構築されます。

これはどのように解決する必要がありますか?グロブがゼロの結果を返す場合、エラーをスローする方法はありますか?

答えて

7

このための準備ができていないようだから、私たちのニーズに合ったモジュールを書いた。

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')); 
}); 
+1

こんにちは、単一の文字列パラメータやファイルを無視する感嘆符の構文を使用する可能性など、いくつかの機能が不足していました。私はあなたにプルリクエストを送ってきました。 – schlingel

0

私は、このパッケージIsThere

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

EXを使用していました。

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が空のため(#)は何も返しません。

関連する問題