Nodemon: Manipulador de eventos Nodemon SIGINT em conflito com Yarn

Criado em 30 abr. 2018  ·  4Comentários  ·  Fonte: remy/nodemon

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:

  • em vez de setTimeout() eu tenho gulp.watch()
  • O Nodemon está sendo necessário, mas só é executado com tarefas Gulp específicas
  • isso faz com que minhas tarefas de observação do Gulp não sejam encerradas em CTRL-C quando o Gulp é executado no Yarn

Uma 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

bug has PR

Todos 4 comentários

É _é_ fio, sou capaz de replicar com fio, mas não com npm:

screen shot 2018-04-30 at 14 51 02

_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.

Esta página foi útil?
0 / 5 - 0 avaliações