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_ENVforma confiável a partir do próprio aplicativo. É melhor definir sua variável de ambiente corretamente, como Daniel vinculado abaixo.
NODE_ENVexplicitamente 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_ENVvoltar ao local development.
cross-env NODE_ENV=productionfunciona em windows e linux / mac.
NODE_ENV=production forever app.jsdeve funcionar.
no package.json:
{
...
"scripts": {
"start": "NODE_ENV=production node ./app"
}
...
}
depois corra no terminal:
npm start
NODE_ENV=productionno package.json não faz muito sentido. A execução npm startno 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 .envaqui ainda? Crie um .envarquivo na raiz do aplicativo require('dotenv').config()e leia os valores. Facilmente alterado, de fácil leitura e multiplataforma.
"mode": "production"no .envarquivo 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-apppara 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=productionagora é 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=developmentao seu ~/.bash_profilee / ou ~/.bashrce / ou ~/.profile.
Pessoalmente, adiciono essa entrada à minha ~/.bashrce, em seguida, ~/.bash_profile ~/.profileimporto 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 startuso 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