Gulp 具有多个排除的 src glob

Gulp src glob with multiple exclude

我是 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 来捕获将来添加的所有文件,因此我不想明确列出它们。

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

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

[您在原来的 post 中添加了一些重要信息,完全改变了答案!您应该使用新条件编辑 post。所以,感谢@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 
});