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

Javascript 如果文件丢失,如何使Gulp.src失败?,javascript,gulp,bower,node-glob,Javascript,Gulp,Bower,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/m

我们的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'));
});
我们的问题是,每当有人添加新库时,如果其他开发人员没有运行
bowerinstall
来获取新组件,他们就会遇到问题。
scripts.js
是在没有它们的情况下生成的,因为它不介意其中一个glob返回空的,即使它是一个命名文件


这应该如何解决?如果glob返回的结果为零,是否有方法抛出错误?

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

该模块允许您检查数组中的所有文件是否都存在,如果缺少任何文件,将抛出一个错误。它在成功时返回一个相同的数组,因此很容易放置到位

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

我在这里用过这个包裹


由于PATHS.javascriptCopyNodeModules为空(#),因此不返回任何内容。

路径:javascriptCopyNodeModules:#-“node_模块/name.min.js”

从“存在”导入

函数javascriptCopyNodeModules(){if(IsThere(path.javascriptCopyNodeModules)){return gulp.src(path.javascriptCopyNodeModules).pipe(gulp.dest(path.dist+'/assets/js/node_modules');}else{
返回gulp.src('path_of_file');}

您可以使用
gulp-plumber
一个gulp插件在构建时获取错误

举例说明:

步骤1:安装管道工:

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
});

您好,我缺少一些功能,比如单字符串参数和使用感叹号语法忽略文件的可能性。我给你发了一个请求。semma thalapathy
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
});