No Ubuntu, é bastante simples; Eu posso executar o aplicativo usando:
$ NODE_ENV=production node myapp/app.js
No entanto, isso não funciona no Windows. Existe um arquivo de configuração onde eu possa definir o atributo?
No Ubuntu, é bastante simples; Eu posso executar o aplicativo usando:
$ NODE_ENV=production node myapp/app.js
No entanto, isso não funciona no Windows. Existe um arquivo de configuração onde eu possa definir o atributo?
Respostas:
As versões atuais do Windows usam o Powershell como o shell padrão; portanto, use:
$env:NODE_ENV="production"
Por resposta de @ jsalonen abaixo. Se você estiver no CMD (que não é mais mantido), use
set NODE_ENV=production
Isso deve ser executado no prompt de comando em que você pretende executar o aplicativo Node.js.
A linha acima definiria a variável de ambiente NODE_ENV para o prompt de comandos em que você executa o comando.
Para definir variáveis de ambiente globalmente para que elas persistam além do prompt de comando único, você pode encontrar a ferramenta no Sistema no Painel de Controle (ou digitando 'ambiente' na caixa de pesquisa no menu Iniciar).
set NODE_ENV=production && node app
. Mais convenientemente configurar o seu package.json
acordo: "scripts": { "start": "set NODE_ENV=production && node app" }
.
echo %NODE_ENV%
para verificar seu valor atual.
cross-env
é a melhor solução para esse problema se sua equipe trabalha em sistemas operacionais mistos. A resposta do @MoOx seria a minha escolha como resposta a esta pergunta.
Acabei de encontrar um bom pacote Node.js. que pode ajudar muito a definir variáveis de ambiente usando uma sintaxe única, plataforma cruzada.
https://www.npmjs.com/package/cross-env
Permite escrever algo como isto:
cross-env NODE_ENV=production my-command
O que é bastante conveniente! Não há mais comandos específicos para Windows ou Unix!
No PowerShell:
$env:NODE_ENV="production"
set NODE_ENV=production
não funcionou para mim no PowerShell, mas isso funcionou. Obrigado!
$env:NODE_ENV="development"; gulp runMytask
. Observe o ponto e vírgula lá. O arquivo gulp pode usar lógica condicional em process.env.NODE_ENV. A menos que você o defina, ele será indefinido.
cross-env NODE_ENV=production
opção é realmente uma solução melhor se estiver executando comandos npm do package.json que exigem que o ambiente seja definido. É muito fácil deixar o env definido no dev / prod depois de usar a opção $ env: NODE_ENV
Seria ideal se você pudesse definir parâmetros na mesma linha que sua chamada para iniciar o Node.js no Windows. Observe o seguinte com cuidado e execute-o exatamente como indicado:
Você tem estas duas opções:
Na linha de comando:
set NODE_ENV=production&&npm start
ou
set NODE_ENV=production&&node index.js
O truque para que ele funcione no Windows é que você precisa remover o espaço em branco antes e depois do "&&". Configure seu arquivo package.json com start_windows (veja abaixo) abaixo. Em seguida, execute "npm run start_windows" na linha de comando.
//package.json
"scripts": {
"start": "node index.js"
"start_windows": "set NODE_ENV=production&&node index.js"
}
Você pode usar
npm run env NODE_ENV=production
É provavelmente a melhor maneira de fazê-lo, porque é compatível com Windows e Unix.
Na documentação do script de execução npm :
O script env é um comando interno especial que pode ser usado para listar variáveis de ambiente que estarão disponíveis para o script em tempo de execução. Se um comando "env" for definido no seu pacote, ele terá precedência sobre o built-in.
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
O --
é obrigatório . Substitua node -e 'console.log(process.env.NODE_ENV)'
pelo comando que desejar.
npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
e ... nada aconteceu. Não tenho certeza se esse método funciona no Windows.
Se você estiver usando o Visual Studio com NTVS, poderá definir as variáveis de ambiente na página de propriedades do projeto:
Como você pode ver, os menus suspensos Configuração e plataforma estão desabilitados (não estudei muito o motivo disso), mas se você editar seu .njsproj
arquivo da seguinte maneira:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<Environment>NODE_ENV=development</Environment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugSymbols>true</DebugSymbols>
<Environment>NODE_ENV=production</Environment>
</PropertyGroup>
O menu suspenso 'Debug / Release' controlará como a variável é definida antes de iniciar o Node.js.
Eu escrevi um módulo win-node-env com o qual você pode executar seu comando como faria no * nix.
NODE_ENV=production node myapp/app.js
Ele funciona criando um NODE_ENV.cmd
que define a NODE_ENV
variável de ambiente e gera um processo filho com o restante do comando e seus argumentos.
Basta instalá-lo (globalmente) e executar seus comandos de script npm, ele deve fazê-los funcionar automaticamente.
npm install -g win-node-env
Minha experiência usando o Node.js no Windows 7 de 64 bits no Visual Studio 2013 é que você precisa usar
setx NODE_ENV development
de uma janela cmd. E você precisa reiniciar o Visual Studio para que o novo valor seja reconhecido.
A sintaxe do conjunto dura apenas a duração da janela do cmd em que está configurada.
Teste simples no Node.js:
console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);
Ele retorna 'indefinido' ao usar set e retornará 'development' se estiver usando setx e reiniciando o Visual Studio.
cmd
- não PowerShell? Ugh, venha pelas janelas, junte-se.
Aqui está o método de linha de não-comando:
No Windows 7 ou 10, digite environment na caixa de pesquisa do menu Iniciar e selecione Editar as variáveis de ambiente do sistema.
Como alternativa, navegue até Painel de controle \ Sistema e segurança \ Sistema e clique em Configurações avançadas do sistema
Isso deve abrir a caixa de diálogo Propriedades do sistema com a guia Avançado selecionada. Na parte inferior, você verá um botão Variáveis de ambiente ... Clique aqui.
A caixa de diálogo Variáveis de ambiente será aberta.
Na parte inferior, em Variáveis do sistema, selecione Novo ... Isso abrirá a caixa de diálogo Nova variável do sistema.
Digite o nome e o valor da variável e clique em OK.
Você precisará fechar todos os prompts do cmd e reiniciar o servidor para que a nova variável esteja disponível para process.env. Se ele ainda não aparecer, reinicie sua máquina.
Só para esclarecer, e para qualquer outra pessoa que possa estar arrancando os cabelos ...
Se você estiver usando o git bash no Windows , set node_env=production&& node whatever.js
isso parece não funcionar . Em vez disso, use o cmd nativo. Em seguida, usar set node_env=production&& node whatever.js
funciona como esperado.
Meu caso de uso:
Desenvolvo no Windows porque meu fluxo de trabalho é muito mais rápido, mas eu precisava garantir que o middleware específico do desenvolvimento do meu aplicativo não estivesse disparando no ambiente de produção.
Para executar seu aplicativo no PowerShell (uma vez que &&
não é permitido):
($env:NODE_ENV="production") -and (node myapp/app.js)
Observe que a saída de texto do que o servidor está fazendo é suprimida e não tenho certeza se isso pode ser corrigido. (Expandindo a resposta de @ jsalonen.)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Para várias variáveis de ambiente, um .env
arquivo é mais conveniente:
# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD
É fácil de usar com dotenv-safe
:
npm install --save dotenv-safe
.index.js
) e use-o diretamente com o process.env
comando :require('dotenv').load()
console.log(process.env.DB_HOST)
Não se esqueça de ignorar o .env
arquivo no seu VCS .
Seu programa falhará rapidamente se uma variável "definida" em .env.example
não estiver configurada como variável de ambiente ou em .env
.
Caso você esteja usando o terminal GITBASH
"set NODE_ENV=production"
não funcione, o que você pode fazer é digitar "exportNODE_ENV=production"
isso não definirá uma variável, mas é útil em muitos casos. Não recomendarei usar isso para produção, mas tudo bem se você estiver brincando com o npm.
npm install --production
Eu usei o script npm para executar uma tarefa gulp sem "&&"
NODE_ENV = casos de teste npm run seed-db
Reinicie o código VS se o NODE_ENV ou qualquer outra variável de ambiente não estiver fornecendo o valor correto. Isso deve funcionar após a reinicialização.