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
});
我是 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
});