Skip to content

Node.js, a diferença entre desenvolvimento e produção

Não há diferença entre desenvolvimento e produção em Node.js, ou seja, não há configurações específicas que você precise aplicar para fazer o Node.js funcionar em uma configuração de produção. No entanto, algumas bibliotecas no registro npm reconhecem o uso da variável NODE_ENV e definem-na como development por padrão. Sempre execute seu Node.js com NODE_ENV=production definido.

Uma maneira popular de configurar seu aplicativo é usando a metodologia dos doze fatores.

NODE_ENV no Express

No popular framework express, definir o NODE_ENV como produção geralmente garante que:

  • o registro seja mantido no mínimo, nível essencial
  • mais níveis de cache ocorram para otimizar o desempenho

Isso geralmente é feito executando o comando

bash
export NODE_ENV=production

no shell, mas é melhor colocá-lo no arquivo de configuração do seu shell (por exemplo, .bash_profile com o shell Bash), porque caso contrário, a configuração não persistirá em caso de reinicialização do sistema.

Você também pode aplicar a variável de ambiente adicionando-a ao comando de inicialização do seu aplicativo:

bash
NODE_ENV=production node app.js

Por exemplo, em um aplicativo Express, você pode usar isso para definir diferentes manipuladores de erros por ambiente:

javascript
if (process.env.NODE_ENV === 'development') {
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
}
if (process.env.NODE_ENV === 'production') {
  app.use(express.errorHandler());
}

Por exemplo, [Pug](https://pugjs.org], a biblioteca de modelos usada por [Express.js](https://express.js], compila no modo de depuração se NODE_ENV não estiver definido como production. As visualizações do Express são compiladas a cada solicitação no modo de desenvolvimento, enquanto na produção elas são armazenadas em cache. Existem muitos outros exemplos.

Esta variável de ambiente é uma convenção amplamente usada em bibliotecas externas, mas não no próprio Node.js.

Por que NODE_ENV é considerado um antipadrão?

Um ambiente é uma plataforma digital ou um sistema onde os engenheiros podem construir, testar, implantar e gerenciar produtos de software. Convencionalmente, existem quatro estágios ou tipos de ambientes onde nosso aplicativo é executado:

  • Desenvolvimento
  • Homologação
  • Produção
  • Teste

O problema fundamental de NODE_ENV decorre de desenvolvedores combinarem otimizações e comportamento de software com o ambiente em que seu software está sendo executado. O resultado é um código como o seguinte:

javascript
if (process.env.NODE_ENV === 'development') {
  // ...
}
if (process.env.NODE_ENV === 'staging') {
  // ...
}
if (process.env.NODE_ENV === 'production') {
  // ...
}
if (process.env.NODE_ENV === 'testing') {
  // ...
}

Embora isso possa parecer inofensivo, torna os ambientes de produção e homologação diferentes, tornando os testes confiáveis impossíveis. Por exemplo, um teste e, portanto, uma funcionalidade do seu produto podem passar quando NODE_ENV estiver definido como development, mas falhar ao definir NODE_ENV como production. Portanto, definir NODE_ENV como algo diferente de production é considerado um antipadrão.