"NODE_ENV" non è riconosciuto come comando interno o esterno, comando eseguibile o file batch


208

Sto cercando di configurare un ambiente per un'app Node.js. ma ricevo questo errore ogni volta.

"NODE_ENV" non è riconosciuto come comando interno o esterno, comando eseguibile o file batch.

Cosa significa questo e come posso risolvere questo problema?

Sto usando Windows e ho anche provato, set NODE_ENV=developmentma non ho avuto fortuna.

Risposte:


273

Sembra che il tuo errore provenga dal tentativo di eseguire qualcosa del genere (che funziona in Linux)

NODE_ENV=development node foo.js

l'equivalente in Windows sarebbe

SET NODE_ENV=development
node foo.js

in esecuzione nella stessa shell dei comandi. Hai menzionato il set NODE_ENV che non ha funzionato, ma non è chiaro come / quando lo hai eseguito.


grazie Jim, l'ho usato nella riga di comando e rimosso dal file package.json. ma dopo ne ho incontrato un altro. sembra che i moduli del nodo non siano completamente supportati da Windows. ha ricevuto un altro errore con bcrypt e gyp.
krozero,

non è un esperto qui, ma bcrypt mostra il supporto per Windows, ma richiede openSSL, non sono sicuro se questo aiuta. In caso contrario, potresti voler pubblicare una nuova domanda poiché lo scenario è leggermente cambiato.
Jim O'Neil,

5
Mentre questo funziona davvero, penso che @ Susan-stack abbia dato la risposta corretta: una soluzione multipiattaforma e non cambiare la linea per funzionare su Windows ma interrompere altri sistemi operativi.
justabuzz,

ha votato la risposta di Susan - la risposta originale era precedente al modulo cross-env
Jim O'Neil,

251

Ho scritto un modulo per questo: win-node-env .

Crea un NODE_ENV.cmdche imposta la NODE_ENVvariabile d'ambiente e genera un processo figlio con il resto del comando e i suoi argomenti.

Basta installarlo (a livello globale) ed eseguire i comandi di script npm, dovrebbe automaticamente farli funzionare.

npm install -g win-node-env

13
Funziona! E non ho dovuto cambiare alcun comando. Questa è la risposta
Abhimanyu Pathania,

3
questa è la
risposta

1
Come posso aggiungere variabili personalizzate al tuo script?
ivan-ivory

1
@ ivan-ivory La prima variabile (cioè NODE_ENV) deve rimanere la stessa (altrimenti dovrà essere uno script completamente separato). E per quanto riguarda l'aggiunta di variabili personalizzate dopo di essa (ovvero NODE_ENV = dev SOME_VAR = val) dovrò modificare la logica dello script per analizzare più variabili da process.argv. Ci ho pensato ma non ho tempo. Sentiti libero di fare una richiesta pull.
laggingreflex,

1
Non ha funzionato per me. Sto ricevendo:> NODE_ENV = sviluppo node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch.
Rod Lima,

173

per windows usare anche &tra i comandi. Piace,

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

7
Il comando funziona ma il valore di NODE_ENVsarà 'sviluppo' (lo spazio bianco tra 't' e '&' sarà contenuto da NODE_ENV)
roroinpho21

1
esattamente quello che dice @ roroinpho21. ora ho .trim()il valore più tardi per far process.env.NODE_ENV == 'production'funzionare. Ad ogni modo per evitarlo in un oneliner?
Flion,

Le persone che non sono riuscite a farlo funzionare, "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" sbagliano "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" vero . È necessario rimuovere il ' ' file around js.
Serhat Türkman,

Questo fa esattamente quello che vuoi se stai cercando di eseguire npm start per impostare la modalità di produzione su produzione.
Jason

90
  1. npm install "cross-env" modulo.
  2. modificare il codice come cross-env NODE_ENV=development node foo.js. Quindi puoi eseguire il like npm run build.

10
Per favore, non dimenticare di includere cross-envle dipendenze inpackage.json
Aminah Nuraini,

1
cross-env migliore risposta!
Williaan Lopes,

La libreria è qui: github.com/kentcdodds/cross-env - e quella pagina dice di includere cross-dev in devDependencies npm install --save-dev cross-env; questo aiuta anche con l'errore 'env' is not recognized as an internal or external commandquando lo script npm diceva env VARNAME=varvalue && ...(basta rimuovere env e inserire invece cross-env). Non è necessario che gli sviluppatori installino qualcosa a livello globale o che dispongano di script npm diversi per piattaforme diverse!
Marcus,

47

Usa win-node-env , per usarlo basta correre sotto il comando sul tuo cmdo power shello git bash:

npm install -g win-node-env

Dopo tutto è come Linux.


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

farà sì che NODE_ENV contenga uno spazio alla fine:

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

Come menzionato in un commento qui , utilizzare questo invece:

NODE_ENV=production&& nodemon app/app.js

13

Modificare i tuoi script per adattarli a Windows è una vera seccatura. Cercare di capire le traduzioni appropriate di Windows e mantenere 2 set di script non è un modo per vivere la tua vita.

È molto più semplice configurare npm per usare bash su Windows e gli script verranno eseguiti così come sono.

Corri semplicemente npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Assicurati che il percorso dell'eseguibile bash sia corretto per il tuo computer. Probabilmente dovrai avviare una nuova istanza del terminale per rendere effettiva la modifica.

Lo screenshot seguente illustra il vantaggio.

  1. npm ERR! quando si tenta di eseguire inizialmente lo script.
  2. Lo script modificato per l'uso di Windows viene eseguito ma non mostra il messaggio di ritorno.
  3. Dopo aver aggiornato npm config per utilizzare bash, lo script viene eseguito e restituisce il messaggio appropriato.

Ottenere l'esecuzione di script npm come in Windows


7

Per coloro che usano Git Bash e hanno problemi con npm run <script>,

Basta impostare npm per utilizzare Git Bash per eseguire gli script

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (cambia il percorso in base alla tua installazione)

E poi npm eseguirà gli script con Git Bash, quindi tali usi come NODE_ENV=funzioneranno correttamente.



2

Per windows apri git bash e prova

NODE_ENV=production node app.js


1
Funziona con Git Bash (come nuovo) se usato direttamente. Ma quando eseguo lo stesso comando npm <scripts_entry>, ricevo un errore con fraseggio diverso ma significato equivalente: considera un nome eseguibile come eseguibile.
Andrey Mikhaylov - lolmaus,

2
@ AndreyMikhaylov-lolmaus npm run <script>utilizza Windows cmd come predefinito per eseguire i comandi. Puoi impostarlo per usare Git Bash. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"E quindi npm runutilizzerà Git Bash per eseguire gli script.
user3790180

1

La maggior parte delle risposte lassù non mi ha aiutato ..

Ciò che mi ha aiutato è stato NODE_ENV=production&& nodemon app/app.js

Prendi nota dello spazio. In bocca al lupo.


1

Se qualcun altro è venuto qui come me, cercando di trovare una soluzione per l'errore:

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

Il motivo per cui ho ottenuto questo è che stavo migrando una soluzione angolare da una macchina di sviluppo mac su un desktop Windows 10. È così che l'ho risolto.

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

  2. vai nel mio file package.json e modifica tutti i riferimenti di script da env <whatever>across-env <whatever>

Quindi i miei comandi come: npm run start:some_random_environment_varora funzionano bene su Windows 10.


Per gli utenti Windows passare a Bash è un po 'complicato, specialmente quando il resto funziona. Questa è una buona soluzione che ha funzionato per me.
FuZZbaLL,

0

process.env.NODE_ENV sta aggiungendo uno spazio bianco per farlo

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

0

Per Windows puoi farlo come

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.