package.json
:
{
...
"scripts": {
"start": "node start.js"
}
}
start.js
:
require('nodemon');
setTimeout(() => {}, 1e6);
No 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
Sem a linha require('nodemon')
, o processo start.js
seria devidamente eliminado pelo fio.
Observe que este não é um problema com npm run
. Pode estar relacionado (não tenho certeza) a https://github.com/yarnpkg/yarn/issues/4667. A razão pela qual eu envio um problema no Nodemon é que eu acho que isso pode ser um problema com o Nodemon e não com o Yarn.
Quando necessário, o Nodemon instala um manipulador de eventos SIGINT
. Quando o yarn recebe um CTRL-C
, ele o encaminha para script.js
mas isso é um noop porque SIGINT
tem um manipulador de eventos.
O exemplo é um pouco inventado para localizar o problema, mas em um cenário da vida real:
setTimeout()
eu tenho gulp.watch()
CTRL-C
quando o Gulp é executado no YarnUma solução alternativa é exigir condicionalmente o Nodemon apenas quando for instanciá-lo, mas parece mais um hack do que uma solução real.
Versões: Node.js 8.11.0, Nodemon 1.17.3, yarn 1.6.0, Ubuntu 17.10
É _é_ fio, sou capaz de replicar com fio, mas não com npm:
_mas_ também é algo que posso consertar dentro do nodemon. Aguente firme.
Sim, o PR parece corrigir esse problema diretamente! Muito obrigado, foi rápido!
@ehmicky não é particularmente rápido, apenas sorte de ter algum tempo livre antes de fazer o jantar para meus filhos.
@remy Não tenho certeza se é outro problema, mas ainda pareço estar tendo isso.
Quando eu executo um processo com nodemon
diretamente, sem problemas. Quando o executo com yarn
, não há problema. Quando eu combino yarn
e nodemon
, eu nunca consigo fazer o processo sair, tendo que pressionar CTRL-C duas vezes.
Eu criei uma pergunta SO com mais detalhes aqui: https://superuser.com/questions/1594660/why-does-zsh-keep-running-after-exiting-a-process-with-ctrl-c-until-ctrl -c-is-p
Veja também https://github.com/remy/nodemon/issues/1647 , é exatamente isso que estou encontrando.