package.json
:
{
...
"scripts": {
"start": "node start.js"
}
}
start.js
:
require('nodemon');
setTimeout(() => {}, 1e6);
Dans le 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
Sans la ligne require('nodemon')
, le processus start.js
serait correctement tué par le fil.
Notez que ce n'est pas un problème avec npm run
. Cela pourrait être lié (pas sûr) à https://github.com/yarnpkg/yarn/issues/4667. La raison pour laquelle je soumets un problème sur Nodemon est que je pense que cela pourrait être un problème avec Nodemon not Yarn.
Lorsqu'il est requis, Nodemon installe un gestionnaire d'événements SIGINT
. Quand yarn obtient un CTRL-C
, il le transmet à script.js
mais c'est un noop car SIGINT
a un gestionnaire d'événements.
L'exemple est un peu artificiel pour cerner le problème, mais dans un scénario réel:
setTimeout()
J'ai gulp.watch()
CTRL-C
lorsque Gulp est exécuté via YarnUne solution de contournement est d'exiger conditionnellement Nodemon uniquement lorsque je vais l'instancier, mais cela ressemble plus à un piratage qu'à une vraie solution.
Versions: Node.js 8.11.0, Nodemon 1.17.3, fil 1.6.0, Ubuntu 17.10
C'est du fil, je suis capable de le répliquer avec du fil, mais pas avec npm:
_mais_ c'est aussi quelque chose que je peux corriger à l'intérieur de nodemon aussi. Tenir fermement.
Oui, le PR semble résoudre directement ce problème! Merci beaucoup, c'était rapide!
@ehmicky pas particulièrement rapide, juste de la chance d'avoir du temps
@remy Je ne sais pas si c'est peut-être un autre problème, mais il me semble toujours y avoir affaire.
Lorsque j'exécute un processus avec nodemon
directement, aucun problème. Quand je l'exécute avec yarn
, pas de problème. Lorsque je combine yarn
et nodemon
, je ne peux jamais faire sortir le processus, car je dois appuyer deux fois sur CTRL-C.
J'ai créé une question SO avec plus de détails ici: https://superuser.com/questions/1594660/why-does-zsh-keep-running-after-exiting-a-process-with-ctrl-c-until-ctrl -c-est-p
Voir aussi https://github.com/remy/nodemon/issues/1647 , c'est exactement ce que je rencontre.