我正在努力让两条并行处理路由在gulp中工作。我的代码如下所示:
gulp.task('build', function(){
return gulp.src(src,{cwd:srcDir})
.pipe(concat('sdk.js', {newLine:'\n\n'}))
.pipe(gulp.dest('dist/'))
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(es.merge(
gulp.src('dist/sdk.js')
.pipe(preprocess({context:{debug:true}}))
.pipe(rename('sdk.debug.js')),
gulp.src('dist/sdk.js')
.pipe(preprocess({context:{}}))
.pipe(uglify())
.pipe(rename('sdk.min.js'))
))
//some more processing
.pipe(gulp.dest('dist/'))
;
});
我找到了一个建议here,这种分叉然后合并流的方式应该有效。但是,我收到错误:
stream.js:79
dest.end();
^
TypeError: Object #<Stream> has no method 'end'
at Stream.onend (stream.js:79:10)
at Stream.EventEmitter.emit (events.js:117:20)
at end (C:\Users\user\Documents\proj\node-sdk\node_modules\gulp-
jshint\node_modules\map-stream\index.js:116:39)
at Stream.stream.end (C:\Users\user\Documents\proj\node-sdk\node
_modules\gulp-jshint\node_modules\map-stream\index.js:122:5)
at Stream.onend (stream.js:79:10)
at Stream.EventEmitter.emit (events.js:117:20)
at end (C:\Users\user\Documents\proj\node-sdk\node_modules\gulp-
jshint\node_modules\map-stream\index.js:116:39)
at queueData (C:\Users\user\Documents\proj\node-sdk\node_modules
\gulp-jshint\node_modules\map-stream\index.js:62:17)
at next (C:\Users\user\Documents\proj\node-sdk\node_modules\gulp
-jshint\node_modules\map-stream\index.js:71:7)
at C:\Users\user\Documents\proj\node-sdk\node_modules\gulp-jshin
t\node_modules\map-stream\index.js:85:7
似乎问题在于使用es.merge,因为没有它(一个处理路径),一切都按预期工作。不幸的是,我对node.js流没有广泛的了解,所以我无法确定这个问题的原因。 我的Node版本是0.10.28,gulp 3.6.2,事件流是3.1.5
答案 0 :(得分:3)
es.merge
不能用作管道的目标,因为它不是正确的WriteStream。它实现write()
但不实现end()
,因此它可以沿着传入的流数据转发,但是当上游源完成时,es.merge
不处理end
事件。我不知道这是es.merge
的预期行为,但至少在其当前实现中,它只能用作来源。
https://github.com/dominictarr/event-stream/blob/master/index.js#L32
另一种解决方案是将您的任务分成两个单独的任务并使用gulp依赖项:
gulp.task('build-concat', function() {
return gulp.src(src,{cwd:srcDir})
.pipe(concat('sdk.js', {newLine:'\n\n'}))
.pipe(gulp.dest('dist/'))
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
gulp.task('build', ['build-concat'], function() {
return es.merge(
gulp.src('dist/sdk.js')
.pipe(preprocess({context:{debug:true}}))
.pipe(rename('sdk.debug.js')),
gulp.src('dist/sdk.js')
.pipe(preprocess({context:{}}))
.pipe(uglify())
.pipe(rename('sdk.min.js'))
))
//some more processing
.pipe(gulp.dest('dist/'))
;
});