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

时间:2015-10-19 07:42:17

标签: 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/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在没有它们的情况下构建,因为它不会介意其中一个globs返回为空,即使它是一个命名文件。

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

4 个答案:

答案 0 :(得分:11)

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

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 :(得分:0)

我使用过这个包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为空(#)不返回任何内容。

答案 2 :(得分:0)

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

从“是那里”导入IsThere;

function javascriptCopyNodeModules(){if(IsThere(PATHS.javascriptCopyNodeModules)){返回gulp.src(PATHS.javascriptCopyNodeModules).pipe(gulp.dest(PATHS.dist +'/ assets / js / node_modules')); }其他{ 返回gulp.src('path_of_file'); }

答案 3 :(得分:0)

您可以使用public static class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((context, configBuilder) => { }) .UseStartup<Startup>(); } gulp插件在构建时出错。

示例说明:

第1步::安装口水管工:

gulp-plumber

第2步::需要在gulpfile中使用gulp plmber模块:

npm i --save-dev gulp-plumber 

第3步:用法

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