Gulp在并行时流式传输结束事件

时间:2014-08-03 06:12:09

标签: gulp gulp-inject

这是有趣的gulpfile:

gulp.task 'index', ['coffee:build', 'templates:build', 'bower', 'sass:build', 'frontend:assets'], ->
  bowerCss = gulp.src ["bower_components/**/*.css"], cwd: 'frontend'
  appJs = gulp.src ["scripts/**/*.js"], cwd: 'frontend'
  appCss = gulp.src ["**/*.css", '!bower_components/**'], cwd: 'frontend'
  return gulp.src 'web/index.html'
  .pipe plugins.inject appJs.pipe(plugins.angularFilesort())
  .pipe plugins.inject appCss
  .pipe plugins.debug()
  .pipe plugins.inject bowerCss, {name: 'bower'}
  .pipe plugins.debug()
  .pipe gulp.dest 'frontend'

调用它最终会将一些文件名注入我的index.html。它工作正常。

当我将其称为更大批次的一部分时:

gulp.task 'develop', [
  'backend:coffee'
  'backend:copy'
  'backend:serve'
  'frontend:serve' # index is required by frontend:serve
  'coffee:watch'
  'sass:watch'
  'templates:watch']

这只是一种失败。我没有从gulp-inject和gulp-debug获得看起来合理的输出,而是从gulp-debug获得以下内容:

[23:06:59] Starting 'index'...
[23:06:59] Starting 'templates:watch'...
[23:06:59] gulp-debug: end event fired (2014-08-03 06:06:59 UTC)
[23:06:59] gulp-debug: end event fired (2014-08-03 06:06:59 UTC)
[23:06:59] Finished 'index' after 188 ms

值得注意的是,我可以做一口气:服务并且工作正常。这只是在我运行我的"只是启动一切"命令。我想我已经错过了一些并行化或竞争条件的问题,但结果事件就像那样肆无忌惮地爆发,这很奇怪。

现在有了这个设置,我可以做gulp frontend:serve,gulp backend:在两个不同的终端上服务,这很好。但是,如果我做gulp前端:服务后端:服务或gulp调试(实际上是相同的,它不会重建我的索引文件。

任何指针?感谢。

1 个答案:

答案 0 :(得分:1)

啊,啊,明白了。它实际上是gulp-nodemon,它在我设置它时设置了进程范围的工作目录:

gulp.task 'backend:serve', ['backend:build', 'backend:copy'],  ->
  plugins.nodemon
    cwd: config.paths.backendBuild
    script: "server.js"

我应该做的

gulp.task 'backend:serve', ['backend:build', 'backend:copy'],  ->
  plugins.nodemon
    watch: config.paths.backendBuild
    script: "backend/server.js"

代替。我不确定在nodemon中设置process.cwd()是否是一个好主意,但这是有意义的,因为这种行为可能来自nodemon,它可能并不期望作为更大的一部分运行项目