"NODE_ENV" no se reconoce como un comando interno o externo, comando operativo o archivo por lotes

208

Estoy tratando de configurar un entorno para una aplicación Node.js. pero recibo este error cada vez.

"NODE_ENV" no se reconoce como un comando interno o externo, comando operativo o archivo por lotes.

¿Qué significa esto y cómo puedo resolver este problema?

Estoy usando Windows y también lo intenté set NODE_ENV=developmentpero no tuve suerte.

krozero
fuente

Respuestas:

273

Parece que su error proviene de un intento de ejecutar algo como esto (que funciona en Linux)

NODE_ENV=development node foo.js

el equivalente en Windows sería

SET NODE_ENV=development
node foo.js

ejecutándose en el mismo shell de comandos. Usted mencionó que el conjunto NODE_ENV no funcionaba, pero no estaba claro cómo / cuándo lo ejecutó.

Jim O'Neil
fuente
gracias Jim, lo usé en la línea de comandos y lo eliminé del archivo package.json. pero me encontré con otro después de eso. Parece que los módulos de nodo no son totalmente compatibles con Windows. Tengo otro error con bcrypt y gyp.
krozero
no es un experto aquí, pero bcrypt muestra soporte para Windows, pero requiere openSSL, no estoy seguro si eso ayuda. De lo contrario, es posible que desee publicar una nueva pregunta ya que el escenario ha cambiado un poco.
Jim O'Neil
55
Si bien esto realmente funciona, creo que @ Susan-stack dio la respuesta correcta: una solución multiplataforma y que no cambia la línea para que funcione en Windows, sino que rompe otro sistema operativo.
justabuzz
votó por la respuesta de Susan: la respuesta original era anterior al módulo cross-env
Jim O'Neil el
251

Escribí un módulo para esto: win-node-env .

Crea un archivo NODE_ENV.cmdque establece la NODE_ENVvariable de entorno y genera un proceso secundario con el resto del comando y sus argumentos.

Simplemente instálelo (globalmente) y ejecute sus comandos de script npm, debería hacerlos funcionar automáticamente.

npm install -g win-node-env
laggingreflex
fuente
13
¡Funciona! Y no tuve que cambiar ningún comando. Esta es la respuesta.
Abhimanyu Pathania
3
esta es la respuesta más fácil
MrTurkay
1
¿Cómo puedo agregar variables personalizadas a tu script?
ivan-ivory
1
@ ivan-ivory La primera variable (es decir, NODE_ENV) tiene que permanecer igual (de lo contrario, deberá ser un script completamente separado). Y en cuanto a agregar variables personalizadas después (es decir, NODE_ENV = dev SOME_VAR = val), tendré que modificar la lógica del script para analizar más variables de process.argv. Lo he estado pensando pero no tengo tiempo. Siéntase libre de hacer una solicitud de extracción.
laggingreflex
1
No funciono para mi. Estoy obteniendo:> NODE_ENV = desarrollo node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules' no se reconoce como un comando interno o externo, programa operable o archivo por lotes.
Rod Lima
173

para Windows, utilice &también el comando intermedio. Me gusta,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }
Mahmudul Hasan
fuente
77
El comando funciona pero el valor de NODE_ENVserá 'desarrollo' (el espacio en blanco entre 't' y '&' estará contenido por NODE_ENV)
roroinpho21
1
exactamente lo que dice @ roroinpho21. ahora tengo .trim()el valor más tarde para hacer el process.env.NODE_ENV == 'production'trabajo. De todos modos para evitar esto en una línea?
Flion
Gente que no podía hacer que funcionara, verdad "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" equivocada . Necesita eliminar el alrededor del archivo js. "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" ' '
Serhat Türkman
Esto hace exactamente lo que desea si está intentando ejecutar npm start para establecer el modo de producción en producción.
Jason
90
  1. npm install "cross-env" módulo.
  2. modificar el código como cross-env NODE_ENV=development node foo.js. Entonces puedes ejecutar el me gusta npm run build.
Susan-stack
fuente
10
Por favor, no olvide incluir cross-enva las dependencias enpackage.json
Aminah Nuraini
1
cross-env mejor respuesta!
Williaan Lopes
La biblioteca está aquí: github.com/kentcdodds/cross-env , y esa página dice incluir cross-dev en devDependencies npm install --save-dev cross-env; esto también ayuda con el error 'env' is not recognized as an internal or external commandcuando el script npm dice env VARNAME=varvalue && ...(simplemente elimine env e inserte cross-env en su lugar). ¡No es necesario que los desarrolladores instalen algo globalmente o que tengan diferentes scripts npm para diferentes plataformas!
Marcus
47

Use win-node-env , para usarlo simplemente ejecute el siguiente comando en su cmdo power shello git bash:

npm install -g win-node-env

Después de eso, todo es como Linux.

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

hará que NODE_ENV contenga un espacio al final:

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

Como se menciona en un comentario aquí , use esto en su lugar:

NODE_ENV=production&& nodemon app/app.js
Flion
fuente
13

Cambiar sus scripts para acomodar Windows es un dolor real. Intentar descubrir las traducciones apropiadas de Windows y mantener 2 conjuntos de scripts no es una forma de vivir tu vida.

Es mucho más fácil configurar npm para usar bash en Windows y sus scripts se ejecutarán tal cual.

Simplemente corre npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Asegúrese de que la ruta al ejecutable bash sea correcta para su máquina. Es probable que deba iniciar una nueva instancia del terminal para que el cambio surta efecto.

La siguiente captura de pantalla ilustra el beneficio.

  1. npm ERR! al intentar ejecutar el script inicialmente.
  2. La secuencia de comandos modificada para el uso de Windows se ejecuta pero no muestra el mensaje de respuesta.
  3. Después de actualizar npm config para usar bash, el script se ejecuta y devuelve el mensaje apropiado.

Conseguir que los scripts npm se ejecuten como está en Windows

Jon Crowell
fuente
7

Para aquellos que usan Git Bash y tienen problemas con npm run <script>,

Simplemente configure npm para usar Git Bash para ejecutar scripts

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (cambie la ruta de acuerdo con su instalación)

Y luego npm ejecutará scripts con Git Bash, por lo que usos como NODE_ENV=funcionarán correctamente.

usuario3790180
fuente
4
npm install -S cross-env

Trabajó para mi

Bang Andre
fuente
2

Para ventanas, abre git bash y prueba

NODE_ENV=production node app.js

Nikhil Arya
fuente
1
Funciona en Git Bash (mintty) cuando se usa directamente. Pero cuando ejecuto el mismo comando desde npm <scripts_entry>, recibo un error con una redacción diferente pero con un significado equivalente: trata el nombre de var var como un ejecutable.
Andrey Mikhaylov - lolmaus
2
@ AndreyMikhaylov-lolmaus npm run <script>usa cmd de Windows por defecto para ejecutar comandos. Puede configurarlo para usar Git Bash. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"Y luego npm runusará Git Bash para ejecutar scripts.
user3790180
1

La mayoría de las respuestas allí arriba no me ayudaron ...

Lo que me ayudó fue NODE_ENV=production&& nodemon app/app.js

Toma nota del espacio. Buena suerte.

SirPhemmiey
fuente
1

Si alguien más vino aquí como yo tratando de encontrar una solución para el error:

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

La razón por la que obtuve esto es porque estaba migrando una solución angular de una máquina de desarrollo de Mac a un escritorio de Windows 10. Así es como lo resolví.

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

  2. vaya a mi archivo package.json y cambie todas las referencias de script de env <whatever>across-env <whatever>

Entonces mis comandos como: npm run start:some_random_environment_varahora se ejecutan bien en Windows 10.

Helzgate
fuente
Para los usuarios de Windows, simplemente cambiar a Bash es un poco complicado, especialmente cuando el resto simplemente funciona. Esta es una buena solución que funcionó para mí.
FuZZbaLL
0

process.env.NODE_ENV está agregando un espacio en blanco para hacer esto

process.env.NODE_ENV.trim() == 'production'
Hamza Abbasi
fuente
0

Para windows puedes hacerlo como

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Husain Dhariwala
fuente