“NODE_ENV” não é reconhecido como um comando interno ou externo, comando operável ou arquivo em lote


208

Estou tentando configurar um ambiente para um aplicativo Node.js. mas estou recebendo esse erro sempre.

"NODE_ENV" não é reconhecido como um comando interno ou externo, comando operável ou arquivo em lote.

O que isso significa e como posso resolver esse problema?

Estou usando o Windows e também tentei, set NODE_ENV=developmentmas não tive sorte.

Respostas:


273

Parece que seu erro vem de uma tentativa de executar algo parecido com isto (que funciona no Linux)

NODE_ENV=development node foo.js

o equivalente no Windows seria

SET NODE_ENV=development
node foo.js

executando no mesmo shell de comando. Você mencionou que o conjunto NODE_ENV não funcionou, mas não estava claro como / quando você o executou.


obrigado Jim, eu usei na linha de comando e removi do arquivo package.json. mas eu encontrei outro depois disso. parece que os módulos do nó não são totalmente suportados pelo Windows. ocorreu outro erro com bcrypt e gyp.
Krozero 13/08

não é um especialista aqui, mas o bcrypt mostra suporte para janelas, mas requer o openSSL, não tenho certeza se isso ajuda. Caso contrário, poderá postar uma nova pergunta, pois o cenário mudou um pouco.
Jim O'Neil

5
Enquanto isso realmente está funcionando, acho que a Susan-stack deu a resposta correta - uma solução de plataforma cruzada e não alterar a linha para funcionar no Windows, mas quebrar outro sistema operacional.
justabuzz

resposta votada por Susan - a resposta original antecedeu o módulo entre envios
Jim O'Neil

251

Eu escrevi um módulo para isso: win-node-env .

Ele cria um NODE_ENV.cmdque define a NODE_ENVvariá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

13
Funciona! E não precisei alterar nenhum comando. Essa é a resposta.
Abhimanyu Pathania

3
este é o mais fácil aswer
mrTurkay 3/17

1
Como posso adicionar variáveis ​​personalizadas ao seu script?
ivan-marfim

1
@ ivan-ivory A primeira variável (ie NODE_ENV) deve permanecer a mesma (caso contrário, terá que ser um script totalmente separado). E quanto a adicionar variáveis ​​personalizadas depois dele (ou seja, NODE_ENV = dev SOME_VAR = val), terei que modificar a lógica do script para analisar mais variáveis ​​de process.argv. Eu estive pensando sobre isso, mas não tenho tempo. Sinta-se livre para fazer uma solicitação de recebimento.
laggingreflex

1
Não funcionou para mim. Estou recebendo:> NODE_ENV = development node_modules / .bin / nodemon --ignore ./public/tones/ --exec servidor de nós-babel / index.js 'node_modules' não é reconhecido como comando interno ou externo, programa operável ou arquivo em lote.
Rod Lima

173

para Windows também use &entre comandos. Gostar,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }

7
As obras de comando, mas o valor NODE_ENVserá 'desenvolvimento' (o espaço em branco entre 't' e 'e' será contido por NODE_ENV)
roroinpho21

1
exatamente o que @ roroinpho21 diz. agora eu tenho que .trim()o valor mais tarde para fazer o process.env.NODE_ENV == 'production'trabalho. De qualquer forma, para evitar isso em um oneliner?
Flion

Pessoas que não conseguiram fazê-lo funcionar, "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" errado de "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" verdade . Você precisa remover o ' ' arquivo js ao redor.
Serhat Türkman

Isso faz exatamente o que você deseja se estiver tentando executar o npm start para definir o modo de produção para produção.
Jason

90
  1. npm install "cross-env" módulo.
  2. modifique o código como cross-env NODE_ENV=development node foo.js. Então você pode executar o mesmo npm run build.

10
Por favor, não se esqueça de incluir cross-envas dependênciaspackage.json
Aminah Nuraini

1
cross-env melhor resposta!
Williaan Lopes 25/09/19

A biblioteca está aqui: github.com/kentcdodds/cross-env - e essa página diz incluir dev-cross no devDependencies npm install --save-dev cross-env; isso também ajuda com o erro 'env' is not recognized as an internal or external commandquando o script npm diz env VARNAME=varvalue && ...(basta remover env e inserir env-cross). Não é necessário que os desenvolvedores instalem algo globalmente ou tenham scripts npm diferentes para plataformas diferentes!
Marcus

47

Use win-node-env . Para usá-lo, basta executar o comando abaixo em seu cmdou power shellou git bash:

npm install -g win-node-env

Depois disso tudo é como o Linux.


27
set NODE_ENV=production & nodemon app/app.js

fará com que NODE_ENV contenha um espaço no final:

process.env.NODE_ENV == 'production'; //false
process.env.NODE_ENV == 'production '; //true

Conforme mencionado em um comentário aqui , use isso:

NODE_ENV=production&& nodemon app/app.js

13

Alterar seus scripts para acomodar o Windows é uma dor real. Tentar descobrir as traduções apropriadas do Windows e manter dois conjuntos de scripts não é uma maneira de viver sua vida.

É muito mais fácil configurar o npm para usar o bash no Windows e seus scripts serão executados como estão.

Simplesmente corra npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Verifique se o caminho para o executável do bash está correto para sua máquina. Você provavelmente precisará iniciar uma nova instância do terminal para que a alteração entre em vigor.

A captura de tela abaixo ilustra o benefício.

  1. npm ERR! ao tentar executar o script inicialmente.
  2. O script modificado para uso do Windows é executado, mas não mostra a mensagem de retorno.
  3. Após atualizar a configuração do npm para usar o bash, o script executa e retorna a mensagem apropriada.

Obtendo scripts npm para executar como está no Windows


7

Para quem usa o Git Bash e tem problemas com npm run <script>,

Basta definir npm para usar o Git Bash para executar scripts

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (mude o caminho de acordo com sua instalação)

E então o npm executará scripts com o Git Bash, para que esses usos NODE_ENV=funcionem corretamente.



2

Para janelas, abra o git bash e tente

NODE_ENV=production node app.js


1
Ele funciona no Git Bash (mintty) quando usado diretamente. Mas quando executo o mesmo comando npm <scripts_entry>, recebo um erro com fraseado diferente, mas com significado equivalente: ele trata env var name como um executável.
Andrey Mikhaylov - lolmaus

2
@ AndreyMikhaylov-lolmaus npm run <script>usa o cmd do Windows como padrão para executar comandos. Você pode configurá-lo para usar o Git Bash. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"E então npm runusará o Git Bash para executar scripts.
user3790180

1

A maioria das respostas lá em cima não me ajudou ..

O que me ajudou foi NODE_ENV=production&& nodemon app/app.js

Tome nota do espaço. Boa sorte.


1

Se mais alguém veio aqui como eu tentando encontrar uma solução para o erro:

'env' is not recognized as an internal or external command

A razão pela qual obtive isso é que estava migrando uma solução angular de uma máquina de desenvolvimento mac para um desktop com Windows 10. Foi assim que eu resolvi.

  1. corre npm install --save-dev cross-env

  2. vá para o meu arquivo package.json e altere todas as referências de script de env <whatever>paracross-env <whatever>

Em seguida, meus comandos como: npm run start:some_random_environment_varagora funcionam bem no Windows 10.


Para os usuários do Windows, basta mudar para o Bash é um pouco complicado, especialmente quando o resto funciona. Esta é uma boa solução que funcionou para mim.
FuZZbaLL 30/07/19

0

process.env.NODE_ENV está adicionando um espaço em branco, faça isso

process.env.NODE_ENV.trim() == 'production'

0

Para janelas, você pode fazê-lo como

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.