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).
Para quem ainda está lutando com isso: set NODE_ENV=production && node app. Mais convenientemente configurar o seu package.jsonacordo: "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps
5
@ShuruiLiu o comando não produzirá nada, mas você pode digitar echo %NODE_ENV%para verificar seu valor atual.
Jani Hartikainen
169
Atenção: "set NODE_ENV = production &&" adiciona um espaço à direita na variável. Eu precisava "set NODE_ENV = production &&" para evitar o espaço adicional que quebra os aplicativos de nó como o Ghost.
daw 15/05
12
@ Amberlamps que não é uma boa solução porque o NODE_ENV é então apenas codificado para todas as máquinas; o objetivo real é alterar o env pela máquina usando uma variável env ou passar o valor na linha de comando, não codificá-lo no arquivo package.json.
Alexander Mills
6
Acho que usar 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.
philk
229
Acabei de encontrar um bom pacote Node.js. que pode ajudar muito a definir variáveis de ambiente usando uma sintaxe única, plataforma cruzada.
set NODE_ENV=productionnão funcionou para mim no PowerShell, mas isso funcionou. Obrigado!
raiva
6
Lutou um pouco para que isso funcionasse no Powershell no Visual Studio Code. Pensei em deixar a solução aqui. Eu estava tentando executar um comando "Gulp", garantindo o valor correto do env. Isto é o que acabou funcionando para mim: $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.
dvsoukup 28/09
2
Só esta solução trabalho para mim com janelas 10 e Webpack 3.8.1
Роман Арсеньев
11
Isso funciona perfeito. Mas, a cross-env NODE_ENV=productionopçã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
Drenai
105
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.
A DEF gostaria de saber como fazê-lo funcionar dessa maneira.
SC_Chupacabra
2
Trabalhou para mim. Tinha que remover o espaço em branco que "set NODE_ENV = produção && nodemon server.js"
SC_Chupacabra
2
Gostaria de ter lido até aqui antes de tentar a resposta acima, teria me poupado algum tempo. : \
Jeff
11
Em uma nota vagamente relacionada, descobri que o && não funcionava como esperado no Windows ao encadear vários comandos. Em caso de dúvida, tente usar | em vez disso
Mike
11
isso funcionou para mim no Windows 10 máquina de 64 bits do cmd e power-shell
Ani
30
Você pode usar
npm run env NODE_ENV=production
É provavelmente a melhor maneira de fazê-lo, porque é compatível com Windows e Unix.
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.
Como podemos executar outro comando com o conjunto de variáveis? Isso não parece funcionar: npm run env NODE_ENV = produção && echo $ NODE_ENV. Provavelmente eles são executados em duas conchas diferentes?
Jonas Kello
11
Pelo que posso ver, isso não funciona. A partir dos documentos em si, ele apenas lista variáveis de ambiente, não as define.
kumarharsh
2
Nao funciona para mim. Ele lista vars, mostram a var você especificar, mas em tempo de execução, var não é ok em process.env.YOUR_VAR ...
Tentei isso com este comando: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jse ... nada aconteceu. Não tenho certeza se esse método funciona no Windows.
Jcollum 19/07
14
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 .njsprojarquivo da seguinte maneira:
Exatamente o que eu estava procurando! para rodar com scripts npm, e até funciona com outras ferramentas de cli do nó, como o gracejo. Assim, "set NODE_ENV = depuração e cls e brincadeira ..." se tornou "cls & NODE_ENV = debug brincadeira"
Z. Khullah
9
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.
cmd- não PowerShell? Ugh, venha pelas janelas, junte-se.
Jcollum 19/07
sua observação sobre o reinício do código VS foi realmente útil!
Yury Kozlov
8
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.
Obrigado! Eu tinha feito tudo isso, mas não estava funcionando até reiniciar o servidor.
Marcel Lamothe
7
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.jsisso parece não funcionar . Em vez disso, use o cmd nativo. Em seguida, usar set node_env=production&& node whatever.jsfunciona 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.
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.)
Os arquivos .env são convenientes apenas para segredos e adicionam uma etapa extra de complexidade ao configurar ao atribuir novas pessoas a um projeto ou aplicar alterações a elas.
Coiso
@coiso Sem um lugar comum e genérico, onde você coloca muitas variáveis env? Em um arquivo de script ou em uma configuração dependente do IDE, você fica ainda mais vinculado a ferramentas específicas. Isso torna a integração de novos membros da equipe ainda mais difícil, eu acho.
Dominik
2
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.
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.
Respostas:
As versões atuais do Windows usam o Powershell como o shell padrão; portanto, use:
Por resposta de @ jsalonen abaixo. Se você estiver no CMD (que não é mais mantido), use
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).
fonte
set NODE_ENV=production && node app
. Mais convenientemente configurar o seupackage.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:
O que é bastante conveniente! Não há mais comandos específicos para Windows ou Unix!
fonte
No PowerShell:
fonte
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_ENVSeria 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:
ou
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.
fonte
Você pode usar
É provavelmente a melhor maneira de fazê-lo, porque é compatível com Windows e Unix.
Na documentação do script de execução npm :
fonte
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
O--
é obrigatório . Substituanode -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:O menu suspenso 'Debug / Release' controlará como a variável é definida antes de iniciar o Node.js.
fonte
Eu escrevi um módulo win-node-env com o qual você pode executar seu comando como faria no * nix.
Ele funciona criando um
NODE_ENV.cmd
que define aNODE_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.
fonte
Minha experiência usando o Node.js no Windows 7 de 64 bits no Visual Studio 2013 é que você precisa usar
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:
Ele retorna 'indefinido' ao usar set e retornará 'development' se estiver usando setx e reiniciando o Visual Studio.
fonte
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.
fonte
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, usarset 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.
fonte
Para executar seu aplicativo no PowerShell (uma vez que
&&
não é permitido):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.)
fonte
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
primeiro no tipo powershell
então digite
Funcionará perfeitamente exibindo todas as saídas.
fonte
Para várias variáveis de ambiente, um
.env
arquivo é mais conveniente:É fácil de usar com
dotenv-safe
:npm install --save dotenv-safe
.index.js
) e use-o diretamente com oprocess.env
comando :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
.fonte
Caso você esteja usando o terminal GITBASH
"set NODE_ENV=production"
não funcione, o que você pode fazer é digitar "exportNODE_ENV=production"
fonte
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.
fonte
Eu usei o script npm para executar uma tarefa gulp sem "&&"
NODE_ENV = casos de teste npm run seed-db
fonte
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.
fonte