Tutorial

Como reiniciar seus aplicativos Node.js automaticamente com o nodemon

Node.js

Introdução

No Node.js, é necessário reiniciar o processo para fazer com que as alterações sejam ativadas. Isso adiciona um passo extra ao seu fluxo de trabalho para que as alterações sejam realizadas. É possível eliminar esse passo extra usando o nodemon para reiniciar o processo automaticamente.

O nodemon é um utilitário de interface de linha de comando (CLI) desenvolvido pelo @rem que encapsula seu aplicativo Node, monitora o sistema de arquivos e reinicia o processo automaticamente.

Neste artigo, você irá aprender sobre a instalação e configuração do nodemon.

Pré-requisitos

Se quiser acompanhar os passos deste artigo, será necessário:

Passo 1 — Instalando o nodemon

Primeiro, você precisará instalar o nodemon em sua máquina. Instale o utilitário globalmente ou localmente em seu projeto usando o npm ou o Yarn:

Instalação global

Instale o nodemon globalmente com o npm:

  • npm install nodemon -g

Ou com o Yarn:

  • yarn global add nodemon

Instalação local

Instale o nodemon localmente com o npm. Ao executar uma instalação local, podemos instalar o nodemon como uma dependência de desenvolvimento com --save-dev (ou --dev):

  • npm install nodemon --save-dev

Ou com o Yarn:

  • yarn add nodemon --dev

Em relação à instalação local, fique ciente de que não será possível usar o comando nodemon diretamente da linha de comando:

Output
  • command not found: nodemon

No entanto, você pode usá-lo como parte de alguns scripts do npm ou com o npx.

Isso conclui o processo de instalação do nodemon. Em seguida, vamos usar o nodemon com os nossos projetos.

Passo 2 — Configurando um projeto Express de exemplo com o nodemon

Podemos usar o nodemon para iniciar um script do Node. Por exemplo, se tivermos uma configuração do servidor Express em um arquivo server.js, podemos iniciá-la e monitorar alterações desta forma:

  • nodemon server.js

Você pode passar os argumentos da mesma forma que faria se estivesse executando o script com o Node:

  • nodemon server.js 3006

Cada vez que você faz uma alteração em um arquivo com uma das extensões monitoradas padrão (.js, .mjs, .json, .coffee ou .litcoffee) no diretório atual ou em um subdiretório, o processo será reiniciado.

Vamos supor que escrevemos um arquivo server.js de exemplo que entrega a mensagem: Dolphin app listening on port ${port}!.

Podemos executar o exemplo com o nodemon:

  • nodemon server.js

Vemos o seguinte resultado no terminal:

Output
[nodemon] 1.17.3 [nodemon] to restart at any time, enter `rs` [nodemon] watching: *.* [nodemon] starting `node server.js` Dolphin app listening on port 3000!

Embora o nodemon ainda esteja sendo executado, vamos alterar o arquivo server.js para exibir a mensagem: Shark app listening on port ${port}!.

Vemos o seguinte resultado adicional no terminal:

Output
[nodemon] restarting due to changes... [nodemon] starting `node server.js` Shark app listening on port 3000!

O resultado do terminal do nosso aplicativo Node.js está sendo exibido como esperado. Reinicie o processo a qualquer momento digitando rs e apertando ENTER.

De maneira alternativa, o nodemon também irá procurar um arquivo main especificado no arquivo package.json do seu projeto:

package.json
{
  // ...
  "main": "server.js",
  // ...
}

Ou, um script start:

package.json
{
  // ...
  "scripts": {
    "start": "node server.js"
  },
  // ...
}

Depois de fazer as alterações no package.json, chame o nodemon para iniciar o aplicativo de exemplo no modo de monitoramento sem precisar passar o server.js.

Passo 3 — Usando opções

É possível modificar as configurações disponíveis no nodemon.

Vamos aprender um pouco sobre as opções principais:

  • --exec: use a opção --exec para especificar um binário com qual será executado o arquivo. Por exemplo, quando combinado com o binário ts-node, o --exec pode tornar-se útil para monitorar alterações e executar os arquivos do TypeScript.
  • --ext: especifique as diferentes extensões de arquivo a serem monitoradas. Para essa opção, forneça uma lista separada por vírgulas de extensões de arquivos (por exemplo, --ext js,ts).
  • --delay: por padrão, o nodemon espera um segundo para reiniciar o processo quando um arquivo é alterado, mas com a opção --delay é possível especificar um atraso diferente. Por exemplo, nodemon --delay 3.2 para um atraso de 3.2 segundos.
  • --watch: use a opção --watch para especificar vários diretórios ou arquivos a serem monitorados. Adicione uma opção --watch para cada diretório que deseja monitorar. Por padrão, o diretório atual e seus subdiretórios são observados. Dessa forma, utilize o --watch para arquivos ou subdiretórios específicos.
  • --ignore: use a opção --ignore para ignorar certos arquivos, padrões de arquivos ou diretórios.
  • --verbose: um resultado mais detalhado com informações sobre os arquivos alterados para disparar um reinício.

Visualize todas as opções disponíveis com o seguinte comando:

  • nodemon --help

Usando essas opções, vamos criar o comando para satisfazer o seguinte cenário:

  • monitorando o diretório server
  • especificando os arquivos com uma extensão .ts
  • ignorando os arquivos com um sufixo .test.ts
  • executando o arquivo (server/server.ts) com o ts-node
  • esperando três segundos para reiniciar após um arquivo é alterado
  • nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts

Esse comando combina as opções --watch, --ext, --exec, --ignore e --delay para satisfazer as condições para o nosso cenário.

Passo 4 — Usando configurações

No exemplo anterior, adicionar as opções de configuração ao executar o nodemon pode ser um processo bastante enfadonho. Uma solução melhor para projetos que precisam de configurações específicas é definir essas configurações em um arquivo nodemon.json.

Por exemplo, aqui estão as mesmas configurações do exemplo de linha de comando anterior, mas colocadas em um arquivo nodemon.json:

nodemon.json
{
  "watch": ["server"],
  "ext": "ts",
  "ignore": ["*.test.ts"],
  "delay": "3",
  "execMap": {
    "ts": "ts-node"
  }
}

Observe o uso do execMap ao invés da opção --exec. O execMap permite que você especifique os binários que devem ser usados para determinadas extensões de arquivo.

De maneira alternativa, se preferir não adicionar um arquivo de configuração nodemon.json ao seu projeto, adicione essas configurações ao arquivo package.json sob uma chave nodemonConfig:

package.json
{
  "name": "test-nodemon",
  "version": "1.0.0",
  "description": "",
  "nodemonConfig": {
    "watch": [
      "server"
    ],
    "ext": "ts",
    "ignore": [
      "*.test.ts"
    ],
    "delay": "3",
    "execMap": {
      "ts": "ts-node"
    }
  },
  // ...

Depois de fazer as alterações no nodemon.json ou no package.json, inicie então o nodemon com o script desejado:

  • nodemon server/server.ts

O nodemon irá captar as configurações e usá-las. Dessa forma, suas configurações podem ser salvadas, compartilhadas e repetidas para evitar erros de copiar e colar ou de digitação na linha de comando.

Conclusão

Neste artigo, você explorou como usar o nodemon com seus aplicativos Node.js. Essa ferramenta ajuda a automatizar o processo de interromper e iniciar um servidor Node para visualizar as alterações.

Para mais informações sobre os recursos disponíveis e correção de problemas, consulte a documentação oficial.

Se quiser aprender mais sobre o Node.js, confira nossa página de tópico do Node.js para exercícios e projetos de programação.

Creative Commons License