Introdução
Em ambientes de desenvolvimento, especialmente aqueles que envolvem muitas iterações, não queremos reiniciar nosso servidor ou aplicativo de back-end manualmente quando fazemos alterações em nosso código-fonte.
Este é um problema que o Nodemon resolve. Ele atua como uma biblioteca de utilitários para controlar as alterações do servidor e reinicia automaticamente nosso aplicativo para nós.
De acordo com a documentação, o Nodemon é uma ferramenta perfeita para desenvolvimento em aplicativos baseados em Node.js. Na verdade, ele foi construído com as propriedades do comando CLI do Node em mente, uma vez que é um invólucro em torno do comando node
.
Basicamente, ele funciona detectando mudanças no diretório atual de nosso código-fonte e reinicia o servidor para atender a essas novas mudanças.
Lembre-se de que, para executar um aplicativo Node.js, começamos com o comando node
e acrescentamos o nome do arquivo. No desenvolvimento com o Nodemon, tudo o que precisamos fazer é executar o Nodemon filename
, e o Nodemon vigiará nossos arquivos para nós.
No entanto, para usar o Nodemon, precisamos instalá-lo globalmente em nossas máquinas ou localmente por projeto.
Quando instalado por projeto, tudo o que precisamos fazer é atualizar a tag script
no arquivo package.json
de nosso projeto. Para usar o Nodemon no modo de desenvolvimento, podemos adicionar uma linha "dev":"nodemon app.js"
à tag script
no mesmo arquivo.
Quando instalado globalmente, o Nodemon está disponível no caminho do nosso sistema e funciona imediatamente.
Neste tutorial, explicarei como o Nodemon funciona, explorando seus recursos e como eles estão sendo usados.
Cobriremos o seguinte:
- O que é Nodemon?
- Instalação do Nodemon local e globalmente
- Configurações e uso do Nodemon
- Recursos do Nodemon
Para acompanhar este tutorial, os leitores devem ter um conhecimento básico de Node.js e Express.
O que é Nodemon?
Como mencionei anteriormente, o Nodemon é um utilitário ou uma ferramenta auxiliar que observa as alterações dos arquivos e reinicia automaticamente nossos aplicativos Node.js. É um código aberto, bem mantido e usado por muitas pessoas na comunidade.
Para ver uma lista de comandos Nodemon disponíveis, podemos usar o sinalizador -h
ou o sinalizador --help
mostrado abaixo. Portanto, podemos executar:
nodemon-h //ou nodemon--help
Existem vários motivos pelos quais devemos usar o Nodemon no desenvolvimento de aplicativos baseados em Node.js.
Em primeiro lugar, é muito fácil de configurar. Em segundo lugar, uma vez instalado, ele é executado automaticamente, pois não requer a chamada de nenhuma instância e, por último, ajuda a iterações mais rápidas para ambientes de desenvolvimento.
Agora, vamos explorar como podemos instalar o Nodemon abaixo.
Instalando o Nodemon
Como mencionamos anteriormente, o Nodemon pode ser instalado globalmente no caminho do nosso sistema ou localmente como uma dependência de desenvolvimento.
Para instalar o Nodemon globalmente em nosso caminho, podemos prosseguir e executar o comando abaixo com a sinalização global -g
:
npm install-g nodemon
Isso significa que o pacote pode ser usado e executado a partir do caminho do sistema em nossa máquina de desenvolvimento.
Caso contrário, podemos executar:
npm install--save-dev nodemon
O comando acima irá instalar o Nodemon localmente em nossa máquina ou como uma dependência de desenvolvimento. Observe aqui que estamos instalando o Nodemon como uma dependência de desenvolvimento com o sinalizador --save-dev
, já que não o queremos como uma dependência de produção.
Quando o Nodemon é instalado globalmente, não precisamos fazer nenhuma outra configuração em nosso ambiente local, pois podemos executar o Nodemon de qualquer caminho em nosso sistema e ele vigiará nossos arquivos de origem para nós.
Depois de executar o comando acima, nosso arquivo package.json
será modificado e a biblioteca Nodemon com seu número de versão será salva na chave "devDependencies"
como mostrado abaixo:
{ "nome":"aplicativo de teste", "versão":"1.0.0", "Descrição":"", "main":"index.js", } "scripts": { "test":"echo \"Erro: nenhum teste especificado \"&& exit 1" } { "autor":"", "licença":"ISC", "privado": falso, "devDependencies": { "nodemon":"^ 2.0.7" }, }
Como uma dependência de desenvolvimento, tudo o que precisamos fazer é adicionar um script dev
em nosso arquivo package.json
para poder usar o Nodemon em nossa configuração local. Vamos agora continuar exibindo um aplicativo Node.js simples para entender todos os recursos e opções de configuração do Nodemon.
Vamos começar com a configuração do servidor localizada no arquivo app.js
. O conteúdo desse arquivo é mostrado abaixo:
require ('dotenv'). config () requer ('./mongoClient') const express=require ('express') const config=require ('./config') const routes=require ('./routes') const app=express () //adicione rotas aqui rotas (app) //captura 404 e encaminha para o manipulador de erros app.use ((req, res, next)=> { const err=new Error ('Não encontrado') console.log (err) err.status=404 res.send ('Rota não encontrada') próximo (err) }) app.listen (process.env.PORT || config.port, ()=> { console.log (`$ {config.appName} ouvindo na porta $ {config.port}!`) }) module.exports=app
Vamos também dar uma olhada em como executar este arquivo de servidor usando o Nodemon. A configuração básica e mínima para fazer uso do Nodemon em nosso projeto é mostrada abaixo no arquivo package.json
localizado na raiz:
{ "nome":"nodemon_tutorial", "versão":"1.0.0", "descrição":"Um tutorial para entender o Nodemon", "main":"app.js", "scripts": { "start":"node app.js", "dev":"nodemon app.js" }, "diretórios": { "modelo":"modelo", "controladores":"controladores" }, "repositório": { "type":"git", "url":"" }, "palavras-chave": [ "Node.js", "JavaScript" ], "autor":"Alexander Nnakwue", "licença":"MIT", "devDependencies": { "nodemon":"^ 2.0.4" }, "dependências": { "bcrypt":"^ 5.0.1", "debug":"^ 4.1.1", "dotenv":"^ 8.2.0", "expresso":"^ 4.17.1", "express-async-handler":"^ 1.1.4", "mangusto":"^ 5.9,25", "paginação do mangusto":"^ 5.0.3", "caminho":"^ 0.12.7", "uuidv4":"^ 6.2.0" }, "motores": { "nó":"13.7.0", "npm":"6.13.6" } }
Como podemos ver na configuração da tag de scripts abaixo:
"scripts": { "start":"node app.js", "dev":"nodemon app.js" },
Então, quando executamos npm run dev
, ele executa o Nodemon e observa nossos arquivos para nós.
O conteúdo quando executamos o arquivo com o Nodemon é mostrado abaixo:
[nodemon] saída limpa-aguardando alterações antes de reiniciar [nodemon] reiniciando devido a mudanças... [nodemon] iniciando `node app.js` (nó: 97775) Aviso Experimental: as exportações condicionais são um recurso experimental. Este recurso pode mudar a qualquer momento Nodemon_tutorial ouvindo na porta 5000! Mongodb conectado Mongoose: users.createIndex ({email: 1}, {unique: true, background: true}) Mongoose: users.createIndex ({phoneNumber: 1}, {unique: true, background: true})
Qualquer saída deste script é prefixada com
[nodemon]
, caso contrário, toda a saída de seu aplicativo, erros incluídos, será exibida conforme o esperado.
Com a sinalização --inspect
(útil para um processo Node.js ouvindo um depurador) no arquivo package.json
, a saída quando executamos npm run dev
é mostrado abaixo:
retina @ alexander backend-server% npm run dev > [email protected] dev/Users/retina/Dropbox/Meu Mac (alexander)/Desktop/nodemon_tutorial/nodemon_tutorial > nodemon-inspecionar app.js [nodemon] 2.0.7 [nodemon] para reiniciar a qualquer momento, digite `rs` [nodemon] observando caminho (s): *. * [nodemon] assistindo a extensões: js, mjs, json [nodemon] iniciando `node--inspect app.js` Depurador ouvindo em ws://127.0.0.1: 9229/8618d563-210c-4070-bed5-b077016abae2 Para obter ajuda, consulte: https://nodejs.org/en/docs/inspector (nó: 98970) Aviso Experimental: as exportações condicionais são um recurso experimental. Este recurso pode mudar a qualquer momento Nodemon_tutorial ouvindo na porta 5000!
A partir da versão 1.1.x
, o Nodemon irá pesquisar por uma propriedade scripts.start
ou uma propriedade main
no pacote .json
no diretório de trabalho atual e inicie o aplicativo para nós.
Vamos experimentar:
(aba) retina @ alexander backend-server% nodemon [nodemon] 2.0.7 [nodemon] para reiniciar a qualquer momento, digite `rs` [nodemon] observando caminho (s): *. * [nodemon] assistindo extensões: js, mjs, json [nodemon] iniciando `node app.js` (nó: 99661) Aviso Experimental: as exportações condicionais são um recurso experimental. Este recurso pode mudar a qualquer momento Nodemon_tutorial ouvindo na porta 5000! Mongodb conectado Mongoose: users.createIndex ({email: 1}, {unique: true, background: true}) Mongoose: users.createIndex ({phoneNumber: 1}, {unique: true, background: true})
Como podemos ver acima, nosso aplicativo ainda funciona como deveria. Observe que aqui, excluí a propriedade scripts
do arquivo package.json
e executei novamente o aplicativo apenas com o comando nodemon
:
//exclua a tag do script e execute o nodemon novamente "scripts": { "start":"node app.js", "dev":"nodemon app.js" }
Para que isso funcione, precisamos ter o nodemon
instalado globalmente em nosso caminho de sistema. A saída quando executamos o comando npm i nodemon-g
para instalar o Nodemon globalmente é mostrada abaixo:
retina @ alexander ~% npm i nodemon-g /usr/local/bin/nodemon->/usr/local/lib/node_modules/nodemon/bin/nodemon.js > [email protected] postinstall/usr/local/lib/node_modules/nodemon > node bin/postinstall || saída 0 + [email protected] adicionou 120 pacotes de 57 contribuidores em 13.404s
Configurações e uso do Nodemon
O Nodemon suporta configurações locais e globais da mesma forma que podemos configurar o sistema globalmente ou por projeto.
Para uma configuração local, podemos ter um arquivo nodemon.json
no diretório de trabalho atual do nosso projeto, e para uma configuração global, podemos ter o mesmo arquivo no caminho inicial do nosso sistema.
Além disso, podemos configurar um nodemonConfig
no arquivo de projetos package.json
para aqueles que preferem manter todas as configurações de seus pacotes em um único lugar.
Observe que essas configurações vêm com uma ressalva quando se trata de quais são executadas. Se especificarmos um arquivo --config
ou fornecer um arquivo nodemon.json
local, qualquer configuração package.json
será ignorada.
Como você deve ter notado, existem três maneiras de configurar o Nodemon para desenvolvimento-local, global e por meio da CLI do Node. Quando digitamos nodemon--help options
, conseguimos ver todas as opções CLI disponíveis para nosso uso.
Para obter mais informações sobre as formas disponíveis de configurar o Nodemon, também podemos digitar * nodemon--help config *
em nosso terminal.
Normalmente, as opções para controlar o Nodemon são passadas por meio da CLI e podem ser listadas quando executamos nodemon--help option
.
Agora, vamos examinar alguns dos vários configurações que podemos adicionar passando mais parâmetros para um arquivo de configuração (--config
) ou para nosso arquivo nodemon.json
. Algumas dessas configurações podem ser úteis ao desenvolver nossos projetos. Vamos dar uma olhada em alguns deles abaixo.
Monitorando vários diretórios
O Nodemon por padrão monitora o diretório de trabalho atual, mas isso pode ser alterado usando a opção --watch
para adicionar caminhos específicos.
Por exemplo, podemos instruir o Nodemon a observar apenas as mudanças em nosso diretório services
ou no arquivo app.js
no nodemon_tutorial
diretório executando o comando abaixo:
nodemon--watch nodemon_tutorial/app.js--watch serviços
Sempre adicione um sinalizador
--watch
para cada diretório que pretendemos monitorar. Isso geralmente é necessário quando vários diretórios são passados.
Ignorando arquivos
Como o Nodemon por padrão reinicia um servidor web quando há alterações de arquivo, podemos efetivamente alterar essa configuração padrão configurando o Nodemon para ignorar alterações feitas em alguns arquivos, diretórios ou padrões de arquivo específicos por meio da linha de comando.
Veja um exemplo abaixo onde ignoramos a pasta testes
:
nodemon--ignore tests/
O comando acima, quando executado, irá ignorar automaticamente quaisquer alterações feitas na pasta tests
. Além disso, observe que, por padrão, o Nodemon ignora os arquivos nas pastas node_modules
e .git
. Incrível, certo? Vamos em frente.
Atrasando reinicialização
O tempo limite padrão para verificar novas alterações no arquivo é geralmente de cerca de um segundo. No entanto, há casos em que pretendemos atrasar o tempo que leva para o Nodemon verificar as alterações de arquivo por um período mais longo.
Podemos fazer isso usando o comando --delay
. Veja o exemplo de código abaixo:
nodemon--delay 3000ms index.js
3000ms
é o valor de atraso em milissegundos (também pode ser em segundos) antes de nosso aplicativo reiniciar. Portanto, o Nodemon só reiniciará o servidor da web quando esse tempo terminar.
Extensões para assistir
Podemos especificar extensões a serem observadas quando houver alterações de arquivo em diretórios ou subdiretórios.
Por exemplo, podemos especificar nossa própria lista com o argumento de linha de comando -e
(ou --ext
). Veja o exemplo de código abaixo:
nodemon-e njk
Por padrão, o Nodemon procura arquivos com
.js
,.mjs
,.coffee
,.litcoffee
e extensões.json
.
Executando código não-nó
Além dos programas Node, o Nodemon também pode ser usado para monitorar outros programas. Com base na extensão do arquivo, o Nodemon executará o comando.
Para obter mais detalhes sobre a execução de código não-nó, os leitores podem verificar o documentação .
Enquanto o Nodemon está rodando, podemos reiniciar nosso aplicativo manualmente. Portanto, em vez de parar e reiniciar o Nodemon, podemos apenas digitar
rs
e pressionar enter , e o Nodemon irá reiniciar o servidor ou o processo em execução para nós.
Recursos do Nodemon
Canalizando a saída para um arquivo (ou qualquer outro lugar)
Podemos dizer ao Nodemon para não gravar no stdout
especificando um conjunto de regras para isso. Mais detalhes podem ser encontrados na documentação .
Adicionando executáveis padrão
O Nodemon, com a ajuda do arquivo de configuração nodemon.json
, pode ter um executável padrão declarado. Isso, por sua vez, nos permitirá observar as mudanças que não são específicas do node.js
.
Para fazer isso, podemos usar a propriedade execMap
. Observe que geralmente é recomendado usar o nodemon.json
global para adicionar uma opção execMap
à nossa configuração. Você pode ler mais detalhes na documentação .
Eventos de disparo na mudança de estado
Podemos adicionar uma notificação quando o Nodemon for reiniciado. Além disso, uma ação pode ser disparada quando um evento ocorre. Mais detalhes sobre isso podem ser encontrados na documentação .
Pode ser usado como um módulo
A partir da versão 1.0.0, o Nodemon pode funcionar como um módulo obrigatório no Node.js. Fazendo isso, podemos estender sua funcionalidade e adequá-la às nossas outras necessidades.
Mais detalhes podem ser encontrados na documentação aqui.
Conclusão
No Node.js, o Nodemon pode ser comparado a uma varinha mágica por causa de sua capacidade de reiniciar automaticamente um aplicativo da web mediante alterações de arquivo. Em outras palavras, o Nodemon simplesmente elimina a necessidade de os programadores pararem e reiniciarem manualmente o código-fonte do aplicativo em desenvolvimento repetidamente após cada alteração.
É uma ferramenta utilitária que torna o desenvolvimento rápido menos complicado. Como uma ferramenta, ele monitora continuamente seu aplicativo Node.js e espera silenciosamente por alterações de arquivo antes de reiniciar automaticamente o servidor. Para adicionar mais algumas configurações extras, podemos usar um arquivo nodemon.json
.
O arquivo pode ser usado para adicionar algumas configurações extras ao nosso aplicativo para nos permitir monitorar vários diretórios, ignorar arquivos e atrasar o reinício, entre outros. Para obter mais detalhes e “pegadinhas” sobre como o Nodemon funciona e possíveis soluções para os problemas, os leitores também podem consultar o destino FAQ .
A documentação do FAQ também contém algumas outras dicas e truques que podemos consultar, incluindo outros casos de uso para Nodemon não mencionados ou cobertos neste tutorial.
Por exemplo, limpar o console na reinicialização, reiniciar o Nodemon na alteração do arquivo .env
, substituir as regras padrão para ignorar e assim por diante. Um link para a documentação está disponível aqui no GitHub .
Obrigado novamente por ler. Deixe seus comentários ou perguntas na seção de comentários abaixo ou entre em contato comigo no Twitter.
A postagem Tutorial do Nodemon: reiniciar automaticamente Os aplicativos Node.js com Nodemon apareceram primeiro no LogRocket Blog .