“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.

krozero
fonte

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.

Jim O'Neil
fonte
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
atraso
fonte
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",
  }
Mahmudul Hasan
fonte
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.
Susan-stack
fonte
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.

AmerllicA
fonte
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
Flion
fonte
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

Jon Crowell
fonte
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.

user3790180
fonte
4
npm install -S cross-env

Trabalhou para mim

Bang Andre
fonte
2

Para janelas, abra o git bash e tente

NODE_ENV=production node app.js

Nikhil Arya
fonte
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.

SirPhemmiey
fonte
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.

Helzgate
fonte
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'
Hamza Abbasi
fonte
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"
},
Husain Dhariwala
fonte