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

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


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

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",
  }

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.

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.


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

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


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.



2

Para ventanas, abre git bash y prueba

NODE_ENV=production node app.js


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.


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.


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'

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"
},
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.