Para uso em ambientes express.js. Alguma sugestão?
Para uso em ambientes express.js. Alguma sugestão?
Respostas:
Antes de executar seu aplicativo, você pode fazer isso no console,
export NODE_ENV=production
Ou, se você estiver no Windows, tente o seguinte:
SET NODE_ENV=production
ou você pode executar seu aplicativo assim:
NODE_ENV=production node app.js
Você também pode configurá-lo no seu arquivo js:
process.env.NODE_ENV = 'production';
Mas não sugiro fazer isso no seu arquivo de tempo de execução, pois não é fácil abrir o VIM no servidor e alterá-lo para produção. Você pode criar um arquivo config.json em seu diretório e sempre que seu aplicativo é executado, ele lê e define a configuração.
process.env.NODE_ENV
forma confiável a partir do próprio aplicativo. É melhor definir sua variável de ambiente corretamente, como Daniel vinculado abaixo.
NODE_ENV
explicitamente toda vez que você executa o aplicativo, como no segundo exemplo ( NODE_ENV=production node app.js
). Dessa forma, você potencialmente se poupará de algum puxão de cabelo no futuro, caso esqueça de NODE_ENV
voltar ao local development
.
cross-env NODE_ENV=production
funciona em windows e linux / mac.
NODE_ENV=production forever app.js
deve funcionar.
no package.json:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
depois corra no terminal:
npm start
NODE_ENV=production
no package.json não faz muito sentido. A execução npm start
no desenvolvimento executará na produção. Você pode escrever seu código como se fosse sempre produção, desde que você sempre o execute dessa maneira. A única razão pela qual vejo isso é forçar outros módulos (por exemplo, o Express) a serem executados no modo de produção. Por que usar variáveis de ambiente se elas nunca mudam?
Ninguém mencionou .env
aqui ainda? Crie um .env
arquivo na raiz do aplicativo require('dotenv').config()
e leia os valores. Facilmente alterado, de fácil leitura e multiplataforma.
"mode": "production"
no .env
arquivo funcionou.
export NODE_ENV=production
é uma solução ruim, desaparece após o reinício.
se você não quiser mais se preocupar com essa variável - adicione-a neste arquivo:
/etc/environment
não use sintaxe de exportação, basta escrever (em nova linha, se já houver algum conteúdo):
NODE_ENV=production
funciona após o reinício. Você não precisará digitar novamente o comando export NODE_ENV = production em qualquer lugar e apenas usar o nó com o que quiser - para sempre, pm2 ...
Para heroku:
heroku config:set NODE_ENV="production"
que é realmente o padrão.
NODE_ENV=production gulp bundle-production-app
para agrupar scripts prontos para produção, no servidor NODE_ENV está no ambiente do servidor e na máquina dev não está lá. Em algumas máquinas, é um pesadelo se não estiver definido e você espera que ele esteja definido sempre . Em alguns, você espera não tê-lo, para não adicioná-lo. De qualquer forma, ao fazer interfaces, deixo claro se está no modo de desenvolvimento, para que você nunca tenha uma pergunta se está ligado ou desligado. Se NODE_ENV é! == produção, está na sua cara que você está em outro modo, então não há pesadelo. Tudo claro, tudo de bom.
/etc/environment
e executá-lo export NODE_ENV=production
?
Para não precisa se preocupar se você está executando seus scripts em Windows, Mac ou Linux instalar o cross-env pacote. Então você pode usar seus scripts facilmente, assim:
"scripts": {
"start-dev": "cross-env NODE_ENV=development nodemon --exec babel-node -- src/index.js",
"start-prod": "cross-env NODE_ENV=production nodemon --exec babel-node -- src/index.js"
}
Acessórios maciços para os desenvolvedores deste pacote.
npm install --save-dev cross-env
heroku config:set NODE_ENV="production"
NODE_ENV=production
agora é o padrão no Heroku node.js implementado.
Para o Windows PowerShell, use este comando
$env:NODE_ENV="production" ; node app.js
No OSX, eu recomendo adicionar export NODE_ENV=development
ao seu ~/.bash_profile
e / ou ~/.bashrc
e / ou ~/.profile
.
Pessoalmente, adiciono essa entrada à minha ~/.bashrc
e, em seguida, ~/.bash_profile
~/.profile
importo o conteúdo desse arquivo, para que seja consistente entre os ambientes.
Depois de fazer essas adições, reinicie o terminal para pegar as configurações.
Se você estiver no Windows. Abra seu cmd na pasta direita e depois primeiro
set node_env={your env name here}
pressione enter, então você pode iniciar seu nó com
node app.js
começará com sua configuração de ambiente
Para ter vários ambientes, você precisa de todas as respostas antes (parâmetro NODE_ENV e exportá-lo), mas eu uso uma abordagem muito simples, sem a necessidade de instalar nada. No seu package.json basta colocar um script para cada ambiente que você precisa, assim:
...
"scripts": {
"start-dev": "export NODE_ENV=dev && ts-node-dev --respawn --transpileOnly ./src/app.ts",
"start-prod": "export NODE_ENV=prod && ts-node-dev --respawn --transpileOnly ./src/app.ts"
}
...
Em seguida, inicie o aplicativo em vez de usar o npm start
uso npm run script-prod
.
No código, você pode acessar o ambiente atual com process.env.NODE_ENV
.
Voila.
CMD do Windows -> set NODE_ENV=production
Powershell do Windows -> $env:NODE_ENV="production"
MAC -> export NODE_ENV=production
Daniel tem uma resposta fantástica, que é a melhor abordagem para o processo correto de implantação (definir e esquecer).
Para quem usa express. Você pode usar o grunt-express-server, que também é fantástico. https://www.npmjs.org/package/grunt-express-server
Pode ser uma chance de você ter criado duas instâncias de sequenciar objetos
por exemplo: var con1 = new Sequelize (); var con2 = novo Sequelize ();
do que também ocorrerá o mesmo erro