во фрагменте вот так:
gulp.task "coffee", ->
gulp.src("src/server/**/*.coffee")
.pipe(coffee {bare: true}).on("error",gutil.log)
.pipe(gulp.dest "bin")
gulp.task "clean",->
gulp.src("bin", {read:false})
.pipe clean
force:true
gulp.task 'develop',['clean','coffee'], ->
console.log "run something else"
В develop
задании, которое я хочу выполнить, clean
и после того, как оно выполнено, запустите, coffee
и когда это будет сделано, запустите что-то еще Но я не могу понять это. Эта часть не работает. Пожалуйста, порекомендуйте.
javascript
node.js
coffeescript
gulp
iLemming
источник
источник
run-sequence
устаревшими - см. ОтветОтветы:
Это еще не официальный релиз, но выход Gulp 4.0 позволяет легко выполнять синхронные задачи с gulp.series. Вы можете просто сделать это так:
Я нашел хороший пост в блоге, в котором рассказывается, как обновить и использовать эти полезные функции: например, перейти на gulp 4
источник
gulp.task('coffee', ['clean'], function(){...}); gulp.task('develop', ['coffee']);
По умолчанию gulp выполняет задачи одновременно, если они не имеют явных зависимостей. Это не очень полезно для таких задач, как
clean
, например , когда вы не хотите зависеть, но вам нужно, чтобы они выполнялись раньше всего.Я написал в
run-sequence
плагин специально , чтобы устранить эту проблему с глотком. После установки используйте его так:Вы можете прочитать полные инструкции по пакету README - он также поддерживает запуск некоторых наборов задач одновременно.
Обратите внимание, что это будет (эффективно) исправлено в следующей основной версии gulp , так как они полностью устраняют автоматическое упорядочение зависимостей и предоставляют инструменты, аналогичные тем,
run-sequence
которые позволяют вам вручную указывать порядок выполнения по своему усмотрению.Тем не менее, это серьезное изменение, поэтому нет причин ждать, когда вы сможете использовать его
run-sequence
сегодня.источник
gulp-clean
плагин не реализовывал Streams 2, поэтому у него были проблемы с запуском в качестве зависимостей. Это было исправлено в версии 0.3.0, мой коллега представил PR, чтобы преобразовать его.run-sequence
решает критическую часть недостающей функциональности в gulp.Единственное хорошее решение этой проблемы можно найти в документации gulp, которую можно найти здесь.
источник
ReferenceError: err is not defined
пытаюсь выполнить этуgulp-compass
задачу, я что-то упустил?return gulp.src('app/**/*.js').pipe(concat(app.js)).pipe(gulp.dest('app/scripts');
, ключом является определение задачи 1 как зависимой при определении задачи 2:gulp.task('two', ['one'], function() {...
задача 2 теперь будет ждать завершения задачи 1 перед выполнением.Я сгенерировал приложение node / gulp с помощью Yeoman генератора generator-gulp-webapp . Он решал «чистую головоломку» таким образом (переводя к оригинальным задачам, упомянутым в вопросе):
источник
gulp.start()
, этот ответ от членаgulp.start is undocumented on purpose because it can lead to complicated build files and we don't want people using it
coffee
задание выполнено? Если я неdevelop
coffee
run-sequence
исходного кода:gulp.on('task_stop')
. Подробности смотрите в моем расширенном ответе: stackoverflow.com/a/38818657/3027390последовательность выполнения является наиболее понятным способом (по крайней мере, до выпуска Gulp 4.0)
С помощью run-sequence ваша задача будет выглядеть так:
Но если вы (по какой-то причине) предпочитаете не использовать его,
gulp.start
метод поможет :Примечание. Если вы только запускаете задачу без прослушивания результата,
develop
задача завершится раньше, чем можетcoffee
, и это может сбить с толку.Вы также можете удалить прослушиватель событий, когда он не нужен
Подумайте, есть ли
task_err
событие, которое вы можете захотеть послушать.task_stop
срабатывает при успешном завершении, аtask_err
появляется при возникновении ошибки.Вы также можете удивиться, почему нет официальной документации для
gulp.start()
. Этот ответ от члена глотка объясняет вещи:(источник: https://github.com/gulpjs/gulp/issues/426#issuecomment-41208007 )
источник
Согласно документам Gulp:
Чтобы запустить последовательность задач синхронно:
gulp.src
) дляgulp.task
информирования задачи о том, когда поток заканчивается.gulp.task
.Смотрите пересмотренный код:
источник
У меня была точно такая же проблема, и решение оказалось для меня довольно простым. В основном измените свой код на следующий, и он должен работать. Примечание: возврат до gulp.src сделал все для меня.
источник
перепробовал все предложенные решения, у всех вроде бы свои проблемы.
Если вы действительно посмотрите на источник Orchestrator, особенно на
.start()
реализацию, то увидите, что если последний параметр является функцией, он будет обрабатывать его как обратный вызов.Я написал этот фрагмент для своих собственных задач:
источник
Я долго искал этот ответ. Теперь я получил это в официальной документации глотка.
Если вы хотите выполнить задачу gulp, когда последняя будет завершена, вы должны вернуть поток:
источник
Просто сделайте
coffee
зависит отclean
иdevelop
зависит отcoffee
:Отправка теперь серийная:
clean
→coffee
→develop
. Обратите внимание, чтоclean
реализация иcoffee
реализация должны принимать обратный вызов, «чтобы механизм знал, когда это будет сделано» :В заключение ниже приведен простой шаблон gulp для синхронной,
clean
за которой следуют асинхронные зависимости сборки :Глоток достаточно умен, чтобы бежать
clean
ровно один раз заbuild
, независимо от того, от сколькихbuild
зависимостей зависитclean
. Как написано выше,clean
это барьер синхронизации, затем всеbuild
зависимости работают параллельно, затемbuild
запускаются.источник
Для меня это не было выполнением задачи minify после конкатенации, поскольку она ожидает конкатенацию ввода, и она не генерировалась несколько раз.
Я попытался добавить к задаче по умолчанию в порядке выполнения, и это не сработало. Это сработало после добавления только
return
для каждой задачи и получения минимизации внутри,gulp.start()
как показано ниже.Источник http://schickling.me/synchronous-tasks-gulp/
источник
Gulp и Node используют обещания .
Так что вы можете сделать это:
Если вы возвращаете поток gulp, вы можете использовать
then()
метод для добавления обратного вызова. Кроме того, вы можете использовать родной NodePromise
для создания своих собственных обещаний. Здесь я используюPromise.all()
один обратный вызов, который срабатывает, когда все обещания разрешаются.источник
Попробуйте это взломать :-) Gulp v3.x Hack for Async bug
Я попробовал все «официальные» способы в Readme, они не работали для меня, но это сработало. Вы также можете перейти на gulp 4.x, но я настоятельно рекомендую этого не делать, он ломает столько вещей. Вы могли бы использовать настоящее обещание JS, но эй, это быстро, грязно, просто :-) По сути, вы используете:
Проверьте пост!
источник