Gulp globbing excluding files then unexcluding not working as described 不按描述工作
Gulp globbing excluding files then unexcluding not working as described
如果我有文件
client/
a.js
bob.js
bad.js
和 gulp 任务
gulp.task('copy', function() {
return gulp.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
.pipe(gulp.dest('public'));
});
那么根据documentation我们应该复制a.js
和bad.js
。但是,当我 运行 使用 gulp v3.9.1 时,它只会复制 a.js
.
这是已知错误吗?有办法吗?
这不是错误,只是文档有误。 gulp 的最新版本是 gulp@3.9.1
,它使用 vinyl-fs@0.3.14
。 behavior you're referring to 直到 vinyl-fs@1.0.0
才被引入。
事实上,其他地方的 gulp 文档 explicitly state 表示 glob 排序将是 gulp@4.0.0
中的一个新功能:
globs passed to gulp.src will be evaluated in order, which means this is possible gulp.src(['*.js', '!b*.js', 'bad.js'])
(exclude every JS file that starts with a b
except bad.js)
这意味着您可以简单地使用 gulp (gulpjs/gulp#4.0
) 的当前开发版本并利用新功能。但是请注意,在定义任务时,gulp 4.x 是 gulp 3.x 的 radically different。
一种解决方法是继续使用 gulp 3.x 来定义任务,但使用最新版本的 vinyl-fs
来创建乙烯基流:
var vinylFs = require('vinyl-fs');
gulp.task('copy', function() {
return vinylFs.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
.pipe(vinylFs.dest('public'));
});
如果您不想这样做,您可以随时使用 merge-stream
将多个流合并为一个流:
var merge = require('merge-stream');
gulp.task('copy', function() {
return merge(gulp.src(['client/*.js', '!client/b*.js']),
gulp.src(['client/bad.js']))
.pipe(gulp.dest('public'));
});
如果我有文件
client/
a.js
bob.js
bad.js
和 gulp 任务
gulp.task('copy', function() {
return gulp.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
.pipe(gulp.dest('public'));
});
那么根据documentation我们应该复制a.js
和bad.js
。但是,当我 运行 使用 gulp v3.9.1 时,它只会复制 a.js
.
这是已知错误吗?有办法吗?
这不是错误,只是文档有误。 gulp 的最新版本是 gulp@3.9.1
,它使用 vinyl-fs@0.3.14
。 behavior you're referring to 直到 vinyl-fs@1.0.0
才被引入。
事实上,其他地方的 gulp 文档 explicitly state 表示 glob 排序将是 gulp@4.0.0
中的一个新功能:
globs passed to gulp.src will be evaluated in order, which means this is possible
gulp.src(['*.js', '!b*.js', 'bad.js'])
(exclude every JS file that starts with ab
except bad.js)
这意味着您可以简单地使用 gulp (gulpjs/gulp#4.0
) 的当前开发版本并利用新功能。但是请注意,在定义任务时,gulp 4.x 是 gulp 3.x 的 radically different。
一种解决方法是继续使用 gulp 3.x 来定义任务,但使用最新版本的 vinyl-fs
来创建乙烯基流:
var vinylFs = require('vinyl-fs');
gulp.task('copy', function() {
return vinylFs.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
.pipe(vinylFs.dest('public'));
});
如果您不想这样做,您可以随时使用 merge-stream
将多个流合并为一个流:
var merge = require('merge-stream');
gulp.task('copy', function() {
return merge(gulp.src(['client/*.js', '!client/b*.js']),
gulp.src(['client/bad.js']))
.pipe(gulp.dest('public'));
});