Node.js, a diferença entre desenvolvimento e produção
Você pode ter configurações diferentes para os ambientes de produção e desenvolvimento.
O Node.js assume que você está sempre rodando de um ambiente de desenvolvimento.
Você pode sinalizar ao Node.js que está rodando em produção definindo a variável de ambiente NODE_ENV=production
.
Isso normalmente é feito executando o comando
export NODE_ENV=production
no shell, mas é melhor colocar no seu arquivo de configuração shell (bash_profile
com Bash shell), porque senão a configuração não é persistida em caso de reinício do sistema.
Você também pode aplicar a variável de ambiente prefixando no comando de inicialização da sua aplicação:
NODE_ENV=production node app.js
Essa variável de ambiente é uma convenção amplamente usada por bibliotecas também.
Definir o ambiente para production
geralmente garante que
- é mantido o mínimo de logs, apenas o essencial
- mais níveis de cache são usados para otimizar a performance
Tomando como exemplo o Pug, a biblioteca de templates usada pelo Express, compila em modo debug se NODE_ENV
não estiver definida como production
. No ambiente de desenvolvimento as views do Express são compiladas em cada requisição, enquanto que em produção elas são cacheadas. Há muitos outros exemplos além desse.
Você pode usar condicionais para executar códigos em ambientes diferentes:
if (process.env.NODE_ENV === "development") {//...}if (process.env.NODE_ENV === "production") {//...}if(['production', 'staging'].indexOf(process.env.NODE_ENV) >= 0) {//...})
Por exemplo, em uma aplicação Express, você pode usar isso para definir o errorHandler
de acordo com o ambiente:
if (process.env.NODE_ENV === "development") {app.use(express.errorHandler({ dumpExceptions: true, showStack: true }))})if (process.env.NODE_ENV === "production") {app.use(express.errorHandler())})