package.json
:
{
...
"scripts": {
"start": "node start.js"
}
}
start.js
:
require('nodemon');
setTimeout(() => {}, 1e6);
Di terminal:
# Does not print anything (except `grep` itself), i.e. no node process is running
$ ps aux | grep node
# We run the `start` task then interrupt it with CTRL-C
$ yarn start
yarn run v1.6.0
node start.js
^C
# yarn was killed, but not `start.js`
$ ps aux | grep node
me 4053 0.0 0.0 4608 876 pts/2 S 14:29 0:00 /bin/sh -c node start.js
me 4054 0.0 0.0 873592 28564 pts/2 Sl 14:29 0:00 node start.js
Tanpa baris require('nodemon')
, proses start.js
akan benar-benar mati oleh benang.
Perhatikan bahwa ini bukan masalah dengan npm run
. Ini mungkin terkait (tidak yakin) dengan https://github.com/yarnpkg/yarn/issues/4667. Alasan saya mengirimkan masalah di Nodemon adalah karena menurut saya ini mungkin masalah dengan Nodemon bukan Yarn.
Jika diperlukan, Nodemon menginstal event handler SIGINT
. Ketika benang mendapat CTRL-C
, itu meneruskannya ke script.js
tetapi ini adalah noop karena SIGINT
memiliki penangan kejadian.
Contohnya sedikit dibuat-buat untuk menunjukkan masalahnya, tetapi dalam skenario kehidupan nyata:
setTimeout()
Saya memiliki gulp.watch()
CTRL-C
saat Gulp dijalankan melalui YarnSalah satu solusinya adalah dengan mensyaratkan Nodemon secara bersyarat hanya ketika saya akan membuatnya, tetapi ini terasa lebih seperti peretasan daripada solusi nyata.
Versi: Node.js 8.11.0, Nodemon 1.17.3, yarn 1.6.0, Ubuntu 17.10
Itu _is_ benang, saya bisa mereplikasi dengan benang, tetapi tidak dengan npm:
_but_ itu juga sesuatu yang bisa saya perbaiki di dalam nodemon juga. Berpegangan kuat.
Ya, PR sepertinya langsung memperbaiki masalah ini! Terima kasih banyak, cepat!
@ehmicky tidak terlalu cepat, hanya beruntung memiliki waktu luang sebelum saya harus membuatkan anak-anak saya makan malam.
@remy Tidak yakin apakah ini mungkin masalah lain, tapi sepertinya saya masih mengalami masalah ini.
Ketika saya menjalankan proses dengan nodemon
secara langsung, tidak ada masalah. Ketika saya menjalankannya dengan yarn
, tidak masalah. Ketika saya menggabungkan yarn
dan nodemon
, saya tidak pernah bisa mendapatkan proses untuk keluar, harus menekan CTRL-C dua kali.
Saya telah membuat pertanyaan SO dengan detail lebih lanjut di sini: https://superuser.com/questions/1594660/why-does-zsh-keep-running-after-exiting-a-process-with-ctrl-c-until-ctrl -c-is-p
Lihat juga https://github.com/remy/nodemon/issues/1647 , itulah yang saya hadapi.