dalam cuplikan seperti ini:
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"
Dalam develop
tugas saya ingin menjalankan clean
dan setelah selesai, jalankan coffee
dan ketika sudah selesai, jalankan sesuatu yang lain. Tapi saya tidak bisa mengetahuinya. Bagian ini tidak berfungsi. Mohon saran.
javascript
node.js
coffeescript
gulp
iLemming
sumber
sumber
run-sequence
usang - lihat jawaban massanishi di bawah iniJawaban:
Ini belum rilis resmi, tetapi datangnya Gulp 4.0 memungkinkan Anda melakukan tugas-tugas sinkron dengan gulp.series dengan mudah. Anda bisa melakukannya seperti ini:
Saya menemukan posting blog yang bagus memperkenalkan cara meningkatkan dan memanfaatkan fitur-fitur yang rapi: bermigrasi ke tegukan 4 sebagai contoh
sumber
gulp.task('coffee', ['clean'], function(){...}); gulp.task('develop', ['coffee']);
Secara default, tegukan menjalankan tugas secara bersamaan, kecuali mereka memiliki dependensi eksplisit. Ini tidak terlalu berguna untuk tugas-tugas seperti
clean
, di mana Anda tidak ingin bergantung, tetapi Anda membutuhkannya untuk berjalan sebelum yang lainnya.Saya menulis ini
run-sequence
plugin yang khusus untuk memperbaiki masalah ini dengan tegukan. Setelah Anda menginstalnya, gunakan seperti ini:Anda dapat membaca instruksi lengkap pada paket README - ini juga mendukung menjalankan beberapa rangkaian tugas secara bersamaan.
Harap dicatat, ini akan (secara efektif) diperbaiki dalam rilis besar gulp berikutnya , karena mereka sepenuhnya menghilangkan pemesanan dependensi otomatis, dan menyediakan alat yang mirip dengan
run-sequence
untuk memungkinkan Anda menentukan secara manual menjalankan pesanan seperti yang Anda inginkan.Namun, itu adalah perubahan besar yang melanggar, jadi tidak ada alasan untuk menunggu kapan Anda dapat menggunakannya
run-sequence
hari ini.sumber
gulp-clean
plugin tidak menerapkan Streams 2, jadi ada masalah yang dijalankan sebagai dependensi. Ini telah diperbaiki pada versi rilis 0.3.0, rekan kerja saya mengirimkan PR untuk mengkonversinya.run-sequence
Memecahkan bagian penting dari fungsionalitas yang hilang di tegukan.Satu-satunya solusi yang baik untuk masalah ini dapat ditemukan dalam dokumentasi tegukan yang dapat ditemukan di sini
sumber
ReferenceError: err is not defined
mencoba menjalankan ini padagulp-compass
tugas, apakah saya melewatkan sesuatu?return gulp.src('app/**/*.js').pipe(concat(app.js)).pipe(gulp.dest('app/scripts');
, kuncinya adalah mengidentifikasi tugas satu sebagai dependen ketika mendefinisikan tugas dua:gulp.task('two', ['one'], function() {...
Tugas dua sekarang akan menunggu tugas satu untuk berakhir sebelum berjalan.Saya membuat aplikasi simpul / teguk menggunakan generator Yeoman generator -gulp-webapp . Ini menangani "teka-teki bersih" dengan cara ini (menerjemahkan ke tugas asli yang disebutkan dalam pertanyaan):
sumber
gulp.start()
ini, jawaban dari anggota tegukan ini menjelaskan bahwa:gulp.start is undocumented on purpose because it can lead to complicated build files and we don't want people using it
(sumber: github.com/gulpjs/gulp/issues/426#issuecomment-41208007 )coffee
tugas itu selesai? Jika saya tidak mendeteksinya,develop
tugas akan selesai lebih awal daricoffee
run-sequence
kode sumber:gulp.on('task_stop')
. Lihat jawaban saya untuk perincian: stackoverflow.com/a/38818657/3027390run-sequence adalah cara yang paling jelas (setidaknya sampai Gulp 4.0 dilepaskan)
Dengan run-sequence , tugas Anda akan terlihat seperti ini:
Tetapi jika Anda (karena alasan tertentu) lebih suka tidak menggunakannya,
gulp.start
metode akan membantu :Catatan: Jika Anda hanya memulai tugas tanpa mendengarkan hasil,
develop
tugas akan selesai lebih awal daricoffee
, dan itu mungkin membingungkan.Anda juga dapat menghapus pendengar acara saat tidak diperlukan
Pertimbangkan juga ada
task_err
acara yang mungkin ingin Anda dengarkan.task_stop
dipicu pada penyelesaian yang berhasil, sementaratask_err
muncul ketika ada beberapa kesalahan.Anda juga mungkin bertanya-tanya mengapa tidak ada dokumentasi resmi untuk
gulp.start()
. Jawaban dari anggota tegukan ini menjelaskan hal-hal berikut:(sumber: https://github.com/gulpjs/gulp/issues/426#issuecomment-41208007 )
sumber
Menurut dokumen Gulp:
Untuk menjalankan urutan tugas Anda secara sinkron:
gulp.src
)gulp.task
Ke untuk memberi tahu tugas saat aliran berakhir.gulp.task
.Lihat kode revisi:
sumber
Saya mengalami masalah yang sama persis dan solusinya ternyata cukup mudah bagi saya. Pada dasarnya ubah kode Anda menjadi yang berikut dan seharusnya berfungsi. CATATAN: pengembalian sebelum gulp.src membuat semua perbedaan bagi saya.
sumber
mencoba semua solusi yang diusulkan, semua tampaknya memiliki masalah sendiri.
Jika Anda benar-benar melihat ke sumber Orchestrator, khususnya
.start()
implementasinya Anda akan melihat bahwa jika parameter terakhir adalah suatu fungsi, ia akan memperlakukannya sebagai panggilan balik.Saya menulis cuplikan ini untuk tugas saya sendiri:
sumber
Saya mencari jawaban ini sebentar. Sekarang saya mendapatkannya di dokumentasi tegukan resmi.
Jika Anda ingin melakukan tugas tegukan saat yang terakhir selesai, Anda harus mengembalikan aliran:
sumber
Cukup buat
coffee
ketergantunganclean
, dandevelop
bergantung padacoffee
:Pengiriman sekarang berseri:
clean
→coffee
→develop
. Perhatikan bahwaclean
implementasi dancoffee
implementasi harus menerima panggilan balik, "jadi mesin tahu kapan akan dilakukan" :Kesimpulannya, di bawah ini adalah pola menelan sederhana untuk sinkron
clean
diikuti oleh dependensi build asinkron :Gulp cukup pintar untuk berjalan
clean
tepat sekali perbuild
, tidak peduli berapa banyakbuild
ketergantungan tergantungclean
. Seperti yang ditulis di atas,clean
adalah penghalang sinkronisasi, maka semuabuild
dependensi berjalan secara paralel, kemudianbuild
berjalan.sumber
Bagi saya itu tidak menjalankan tugas minify setelah concatenation karena mengharapkan input concatenated dan tidak dihasilkan beberapa kali.
Saya mencoba menambah tugas default dalam urutan eksekusi dan tidak berhasil. Ini berhasil setelah menambahkan hanya
return
untuk setiap tugas dan mendapatkan minifikasi di dalamgulp.start()
seperti di bawah ini.Sumber http://schickling.me/synchronous-tasks-gulp/
sumber
Tegp dan Node menggunakan janji .
Jadi Anda bisa melakukan ini:
Jika Anda mengembalikan aliran tegukan, Anda dapat menggunakan
then()
metode ini untuk menambahkan panggilan balik. Sebagai alternatif, Anda dapat menggunakan Node's nativePromise
untuk membuat janji Anda sendiri. Di sini saya gunakanPromise.all()
untuk memiliki satu panggilan balik yang menyala ketika semua janji terselesaikan.sumber
Coba retasan ini :-) Gulp v3.x Retas untuk bug Async
Saya mencoba semua cara "resmi" di Readme, mereka tidak bekerja untuk saya tetapi ini berhasil. Anda juga dapat memutakhirkan ke tegukan 4.x tapi saya sangat menyarankan Anda tidak, itu merusak banyak hal. Anda bisa menggunakan janji js asli, tapi hei, ini cepat, kotor, sederhana :-) Pada dasarnya Anda menggunakan:
Lihat posnya!
sumber