SSCCE:
gulp.task('foo', [], function() {
var barFiles = getBarFiles();
var bazFiles = getBazFiles();
var barStream, bazStream;
if (barFiles && barFiles.length > 0) {
barStream = gulp.src(barFiles);
}
if (bazStream && bazStream.length > 0) {
bazStream = gulp.src(bazStream);
}
return eventStream
.merge(barStream, bazStream)
.pipe(g.concat('bar-and-baz'))
.pipe(gulp.dest('./foo-output/'));
});
getBarFiles()
或getBazFiles()
可能会返回一个空数组,gulp.src()
不允许的:Error: Invalid glob argument
,因此,需要使用
if
条件包装流的创建。所以问题是,我如何创建一个空流,
以便可以与非空流上的另一个空合并?
最佳答案
创建用于gulp(从Vinyl-fs源收集)的空流的函数是这样的:
var through2 = require('through2');
function createEmptyStream() {
var pass = through2.obj();
process.nextTick(pass.end.bind(pass));
return pass;
}
如果在示例中将barFiles = createEmptyStream()设置为功能相同。
2016-03-05的最新版本的gulp(3.9.1)和Vinyl-fs(0.3.0)允许使用空src数组(根据我的测试)。它使用与上面类似的方法创建一个空流。您的示例在当前版本中有效(大多数情况下是这样):
var eventStream = require('event-stream');
var gulp = require('gulp');
var g = require('gulp-load-plugins')();
function getBarFiles() {
return [
];
}
function getBazFiles() {
return [
'baz.txt'
];
}
gulp.task('foo', [], function() {
var barFiles = getBarFiles();
var bazFiles = getBazFiles();
var barStream = gulp.src(barFiles);
var bazStream = gulp.src(bazFiles);
return eventStream
.merge(barStream, bazStream)
.pipe(g.concat('bar-and-baz.txt'))
.pipe(gulp.dest('./'));
});
gulp.task('default', [ 'foo' ]);
bar-and-baz.txt文件是从这两个函数返回的glob中所有文件内容的串联。接受一个空列表。
关于javascript - 如何在Gulp中创建空流?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25605469/