如果文件丢失,如何使Gulp.src失败?

Kai*_*aja 11 javascript bower gulp node-glob

我们的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'));
});
Run Code Online (Sandbox Code Playgroud)

我们的问题是,每当有人添加新库时,如果其他开发人员没有运行bower install以获取新组件,则会遇到问题.该scripts.js地没有他们建,因为它不会介意的水珠之一返回空,即使它是一个命名的文件.

该如何解决?如果glob返回零结果,有没有办法抛出错误?

Kai*_*aja 13

由于似乎没有现成的解决方案,我写了一个模块来满足我们的需求.

文件并存模块允许你检查数组中的所有文件是否都存在,如果有任何遗漏抛出一个错误.它成功返回一个相同的数组,因此很容易就位.

  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'));
});
Run Code Online (Sandbox Code Playgroud)