【问题标题】:Gulp src glob with multiple exclude具有多个排除的 Gulp src glob
【发布时间】:2017-07-13 10:41:48
【问题描述】:

我对 Gulp 很陌生,试图弄清楚如何从 glob 中排除多个文件...例如,这适用于单个文件: return gulp.src(['assets/js/src/!(app)*.js'])

但是有可能/排除多个文件的语法是什么?例如。 return gulp.src(['assets/js/src/!(app,test)*.js']) 但显然这不起作用...

编辑 - 我稍后将添加回文件 app.js 和 test.js,以便将它们添加到缩小文件的末尾。

例如(这仅适用于单个文件:)return gulp.src(['assets/js/src/!(app)*.js', 'assets/js/src/app.js'])

我正在寻找一种在最后添加多个文件的解决方案,以便我可以控制缩小文件的顺序。此外,重要的是我可以使用 glob 来捕获将来将添加的所有文件,因此我不想明确列出它们。

【问题讨论】:

  • 我已经回滚了您为问题添加解决方案的编辑。根据本网站的编辑惯例,解决方案属于答案,而不是问题。如果您愿意,您可以发布您的解决方案作为答案,但在我看来,Mark 的 answer 已经涵盖了它。如果您确实有其他 Mark 未涵盖的内容要贡献,请务必发布答案,但请确保将其与 Mark 区分开来。仅重复先前答案的答案不受欢迎,可能会被删除。

标签: gulp glob


【解决方案1】:

在 glob 中,OR 模式的定义类似于 {A,B}。所以,这应该工作:

gulp.src(['assets/js/src/*.js', '!assets/js/src/*{app,test}*.js'])

【讨论】:

  • 感谢您的建议,很遗憾这对我不起作用。
  • 这绝对有效,但是我稍后会添加回 app.js 文件中,以便将其添加到缩小文件的末尾。例如return gulp.src(['assets/js/src/!(app)*.js', 'assets/js/src/app.js']) 并且您的建议取消了添加...
  • 很好,你能关闭这个问题吗?
【解决方案2】:

[您在原始帖子中添加了一些重要信息,完全改变了答案!您应该使用新条件编辑您的帖子。所以,感谢@dloeda glob 否定:

现在你可以试试gulp-filter

const gulp = require('gulp');
// const uglify = require('gulp-uglify');
const filter = require('gulp-filter');

gulp.task('default', () => {
   // Create filter instance inside task function
   const f = filter(['assets/js/src/*.js', '!assets/js/src/*{app,test}*.js'], {restore: true});

   return gulp.src('src/**/*.js')
    // Filter a subset of the files
    .pipe(f)
    // Run them through a plugin
    // .pipe(uglify())
    // Bring back the previously filtered out files (optional)
    .pipe(f.restore)
    .pipe(gulp.dest('dist'));
});

但是,从 gulp-filter 文档中我不清楚 f.restore 将过滤后的文件添加到流的末尾还是返回到 src 流中的原始位置。如果您发现它没有放在最后,请告诉我,并且可以通过其他方法对其进行修改。

另请参阅Contra's answer to adding to src,如果您使用的是 gulp4.0,添加到 src 非常容易。

或者,gulp-add-src 看起来很有前途,我刚刚发现了它,所以你可以试试这个替代代码:

var addsrc = require('gulp-add-src');

gulp.task('build', function () {
     // start with excluding app.js and test.js 
  return gulp.src(['assets/js/src/*.js', '!assets/js/src/*{app,test}*.js'])   
   // .pipe(whatever)                        
   .pipe(addsrc.append('assets/js/src/app.js')) // append app.js to the end of the stream 
   .pipe(uglify())               // we minify everything 
   .pipe(gulp.dest('dist'));     // and write to dist 
});

【讨论】:

  • 感谢您的详细回答,gulp-add-src 就像一个魅力!