此函数的返回值必须是流。在非监视模式下,这很简单;只需返回rebundle,browserify流被转换,诸如此类。然而,在监视模式下,rebundle会在每次更新时运行,并且每次都会创建一个新流。我需要一种方法来合并所有这些流,因为它们被创建为一个我可以返回的无穷无尽的流,实际上可以一直消费下去。使用组合流,似乎一旦数据被读取,流就不再是可写的,所以这是不可能的。任何帮助都将不胜感激!
var bundleify = function(watch) {
var bundler = (watch?watchify:browserify)('main.js');
var rebundle = function () {
return bundler.bundle()
.on('error', console.log)
.pipe(source('main.js'))
.pipe(rename('app.js'))
.pipe(jsTasks()); // lazypipe with other tasks
};
// Regular browserify, just return the stream.
if (!watch) {
return rebundle();
}
// Watchify, rebundle on update.
bundler.on('update', function() {
rebundle();
});
// return ????
}发布于 2014-07-18 04:44:16
这是我想出的解决方案。这是一个很好的解决方案(诚然,我对流的理解不是很好),但它看起来工作得很好。仍然有兴趣找到一种更好的方式。
var outstream = through2.obj();
var interceptor = function(){
return through2.obj(function(obj, enc, cb) {
outstream.push(obj);
cb()
});
}
bundler.on('update', function() {
rebundle().pipe(interceptor());
});
rebundle().pipe(interceptor());
return outstream;https://stackoverflow.com/questions/24812386
复制相似问题