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/

10-09 07:45