Gulp Streams запускает конечные события, когда параллельно

Вот интересный 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 frontend: serve backend: serve или gulp debug (что фактически одно и то же, это не перестроит мой индексный файл.

Есть указатели? Благодарю.

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"

вместо. Я не уверен, что установка process.cwd() в nodemon - отличная идея, но имеет смысл, учитывая, что такое поведение, вероятно, исходит от nodemon, который, вероятно, не ожидает, что он будет работать как часть более крупного проекта.

Другие вопросы по тегам