如果我有文件
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
。
这是一个已知的错误吗?有没有办法做到这一点?
答案 0 :(得分:0)
这不是一个错误,文档是错误的。 gulp的最新版本为gulp@3.9.1
,使用vinyl-fs@0.3.14
。 vinyl-fs@1.0.0
之前没有引入behavior you're referring to。
事实上,在其他地方gulp docs explicitly state,整数排序将是gulp@4.0.0
中的新功能:
传递给gulp.src的globs将按顺序进行评估,这意味着可以
gulp.src(['*.js', '!b*.js', 'bad.js'])
(排除以b
开头的每个JS文件,除了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'));
});