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

寵の児 提交于 2019-12-22 03:33:21

问题


Our gulp build takes a bunch of libraries installed with bower, then concatenates them with all the code we have distributed across several directories. Here's what it looks like:

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

Our problem is that whenever someone adds new libraries, other developers will encounter problems if they haven't run bower install to get the new components. The scripts.js gets built without them since it won't mind that one of the globs returns empty, even if it is a named file.

How should this be solved? Is there a way to throw an error if a glob returns zero results?


回答1:


Since there didn't seem to be a ready solution for this, I wrote a module to fit our needs.

The files-exist module allows you to check whether all files in an array are present, throwing an error if any are missing. It returns an identical array on success, so it is simple to drop in place.

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



回答2:


I have used this package 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('.');
   }
}

since PATHS.javascriptCopyNodeModules is empty (#) return nothing.




回答3:


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



来源:https://stackoverflow.com/questions/33209074/how-to-make-gulp-src-fail-if-a-file-is-missing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!