Gulp src glob有多个排除

时间:2017-07-13 10:41:49

标签: gulp glob

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

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

编辑 - 我稍后在文件app.js&中添加回来。 test.js所以它们被添加到缩小文件的末尾。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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