0

这是有趣的 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 frontend:serve、gulp backend:serve ,这很好。但是,如果我执行 gulp frontend:serve backend:serve 或 gulp debug (实际上是相同的,它不会重建我的索引文件。

任何指针?谢谢。

4

1 回答 1

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,它可能不希望作为更大项目的一部分运行,这是有道理的。

于 2014-08-03T16:04:26.177 回答