11

我们的 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因为它不会介意其中一个 glob 返回空,即使它是一个命名文件。

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

4

4 回答 4

14

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

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'));
});
于 2015-12-28T13:32:21.913 回答
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 为空 (#) 不返回任何内容。

于 2017-06-13T17:49:56.950 回答
0

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

从'is-there'导入IsThere;

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

于 2019-07-08T06:40:26.300 回答
0

您可以使用gulp-plumbergulp 插件在构建时出错。

举例说明:

第 1 步:安装 gulp-plumber:

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
});
于 2020-10-09T11:06:47.420 回答