Las versiones actuales de Windows usan Powershell como shell predeterminado, así que use:
$env:NODE_ENV="production"
Por la respuesta de @ jsalonen a continuación. Si está en CMD (que ya no se mantiene), use
set NODE_ENV=production
Esto debe ejecutarse en el símbolo del sistema donde tiene la intención de ejecutar su aplicación Node.js.
La línea anterior establecería la variable de entorno NODE_ENV para el símbolo del sistema donde ejecuta el comando.
Para establecer variables de entorno globalmente para que persistan más allá del simple símbolo del sistema, puede encontrar la herramienta desde el Sistema en el Panel de control (o escribiendo 'entorno' en el cuadro de búsqueda en el menú de inicio).
Para cualquier persona que sigue luchando con esto: set NODE_ENV=production && node app. Más convenientemente configurar su package.jsonconsecuencia: "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps
55
@ShuruiLiu el comando no generará nada, pero puede escribir echo %NODE_ENV%para verificar su valor actual.
Jani Hartikainen
169
Aviso: "set NODE_ENV = production &&" agrega un espacio final a la variable. Necesitaba "establecer NODE_ENV = production &&" para evitar el espacio adicional que rompe las aplicaciones de nodo como Ghost.
amanece
12
@Amberlamps que no es una buena solución porque el NODE_ENV está codificado para todas las máquinas; El objetivo real es cambiar el entorno por máquina utilizando una variable de entorno o pasar el valor en la línea de comando, no codificarlo en el archivo package.json.
Alexander Mills
66
Creo que usar cross-enves la mejor solución a este problema si su equipo trabaja en sistemas operativos mixtos. La respuesta de @MoOx sería mi elección como respuesta a esta pregunta.
philk
230
Acabo de encontrar un buen paquete Node.js que puede ayudar mucho a definir variables de entorno utilizando una sintaxis única, multiplataforma.
set NODE_ENV=productionNo funcionó para mí en PowerShell pero esto sí. ¡Gracias!
ira
66
Luchó un poco para que esto funcione desde Powershell dentro de Visual Studio Code. Pensé que dejaría la solución aquí. Intentaba ejecutar un comando "Gulp", mientras me aseguraba de que se estableciera el valor env correcto. Esto es lo que terminó trabajando para mí: $env:NODE_ENV="development"; gulp runMytask. Tenga en cuenta el punto y coma allí. El archivo gulp puede usar lógica condicional en process.env.NODE_ENV. A menos que lo configure, será indefinido.
dvsoukup
2
Solo esta solución me funciona con Windows 10 y webpack 3.8.1
Роман Арсеньев
1
Esto funciona perfecto Pero, la cross-env NODE_ENV=productionopción es realmente una mejor solución si ejecuta comandos npm desde package.json que requieren que se configure el entorno. Es demasiado fácil dejar el entorno establecido en dev / prod después de usar la opción $ env: NODE_ENV
Drenai
105
Sería ideal si pudiera establecer parámetros en la misma línea que su llamada para iniciar Node.js en Windows. Mire cuidadosamente lo siguiente y ejecútelo exactamente como se indica:
Tienes estas dos opciones:
En la línea de comando:
set NODE_ENV=production&&npm start
o
set NODE_ENV=production&&node index.js
El truco para que funcione en Windows es que necesita eliminar el espacio en blanco antes y después de "&&". Configura tu archivo package.json con start_windows (ver más abajo) a continuación. Luego ejecute "npm run start_windows" en la línea de comando.
A DEF le gustaría saber cómo hacer que funcione de esta manera.
SC_Chupacabra
2
Trabajó para mi. Tuve que eliminar el espacio en blanco aunque "set NODE_ENV = production && nodemon server.js"
SC_Chupacabra
2
Ojalá hubiera leído hasta aquí antes de intentar la respuesta anterior, me habría ahorrado algo de tiempo. : \
Jeff
1
En una nota vagamente relacionada, encontré que && no funcionaba como se esperaba en Windows al encadenar múltiples comandos juntos. En caso de duda, intente utilizar | en cambio
Mike
1
esto funcionó para mí en la máquina con Windows 10 de 64 bits desde cmd y power-shell
Ani
30
Puedes usar
npm run env NODE_ENV=production
Probablemente sea la mejor manera de hacerlo, porque es compatible tanto en Windows como en Unix.
El script env es un comando incorporado especial que se puede usar para enumerar las variables de entorno que estarán disponibles para el script en tiempo de ejecución. Si se define un comando "env" en su paquete, tendrá prioridad sobre el incorporado.
¿Cómo podemos ejecutar otro comando con el conjunto de variables? Esto no parece funcionar: npm run env NODE_ENV = production && echo $ NODE_ENV. ¿Probablemente se ejecutan en dos proyectiles diferentes?
Jonas Kello
1
Por lo que puedo ver, esto no funciona en absoluto. Desde los documentos en sí, solo enumera las variables de entorno, no las configura.
kumarharsh
2
No funciona para mi Enumera vars, muestra la var que especifique, pero en tiempo de ejecución, var no está bien en process.env.YOUR_VAR ...
Intenté esto con este comando: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jsy ... no pasó nada. No estoy seguro de que este método funcione en Windows.
jcollum
14
Si está utilizando Visual Studio con NTVS, puede establecer las variables de entorno en la página de propiedades del proyecto:
Como puede ver, los menús desplegables de Configuración y Plataforma están deshabilitados (no he investigado demasiado por qué esto es así), pero si edita su .njsprojarchivo de la siguiente manera:
¡Exactamente lo que estaba buscando! para ejecutar con scripts npm, e incluso funciona con otras herramientas cli de nodos como jest. Entonces "set NODE_ENV = debug & cls & jest ..." se convirtió en "cls & NODE_ENV = debug jest"
Z. Khullah
9
Mi experiencia con Node.js en Windows 7 de 64 bits en Visual Studio 2013 es que necesita usar
setx NODE_ENV development
desde una ventana cmd. Y debe reiniciar Visual Studio para que se reconozca el nuevo valor.
La sintaxis establecida solo dura la duración de la ventana de cmd en la que se establece.
cmd- No es PowerShell? Ugh, entra en Windows, reúnelo.
jcollum
¡Su comentario sobre el reinicio del código VS fue realmente útil!
Yury Kozlov el
8
Aquí está el método de línea sin comando:
En Windows 7 o 10, escriba entorno en el cuadro de búsqueda del menú de inicio y seleccione Editar las variables de entorno del sistema.
Alternativamente, navegue a Panel de control \ Sistema y seguridad \ Sistema y haga clic en Configuración avanzada del sistema
Esto debería abrir el cuadro de diálogo Propiedades del sistema con la pestaña Avanzado seleccionada. En la parte inferior, verá un botón Variables de entorno ... Haz clic aquí.
Se abrirá el cuadro de diálogo Variables de entorno.
En la parte inferior, en Variables del sistema, seleccione Nuevo ... Esto abrirá el cuadro de diálogo Nueva variable del sistema.
Ingrese el nombre y el valor de la variable y haga clic en Aceptar.
Deberá cerrar todas las solicitudes de cmd y reiniciar su servidor para que la nueva variable esté disponible para process.env. Si aún no aparece, reinicie su máquina.
¡Gracias! Había hecho todo esto, pero no funcionó hasta que reinicié el servidor.
Marcel Lamothe
7
Solo para aclarar, y para cualquier otra persona que pueda estar arrancándose el cabello ...
Si está utilizando git bash en Windows , set node_env=production&& node whatever.jsparece que no funciona . En su lugar, use el cmd nativo. Luego, usando los set node_env=production&& node whatever.jstrabajos como se esperaba.
Mi caso de uso:
Me desarrollo en Windows porque mi flujo de trabajo es mucho más rápido, pero necesitaba asegurarme de que el middleware específico de desarrollo de mi aplicación no se activara en el entorno de producción.
Tenga en cuenta que la salida de texto de lo que está haciendo el servidor se suprime, y no estoy seguro de si eso se puede solucionar. (Ampliando la respuesta de @ jsalonen).
Los archivos .env solo son convenientes para los secretos y agregan un paso adicional de complejidad cuando se configuran al asignar nuevas personas a un proyecto o al aplicarles cambios.
coiso
@coiso Sin un lugar genérico y común, ¿dónde pones muchas variables env? Ya sea en un archivo de secuencia de comandos o en una configuración dependiente de IDE, está aún más vinculado a herramientas específicas. Creo que esto hace que la integración de nuevos miembros del equipo sea aún más difícil.
Dominik
2
En caso de que esté utilizando el terminal GITBASH
"set NODE_ENV=production"
no funcionará, lo que puede hacer es escribir "exportarNODE_ENV=production"
esto no establecerá una variable pero es útil en muchos casos. No recomendaré usar esto para la producción, pero debería estar bien si estás jugando con npm.
Respuestas:
Las versiones actuales de Windows usan Powershell como shell predeterminado, así que use:
Por la respuesta de @ jsalonen a continuación. Si está en CMD (que ya no se mantiene), use
Esto debe ejecutarse en el símbolo del sistema donde tiene la intención de ejecutar su aplicación Node.js.
La línea anterior establecería la variable de entorno NODE_ENV para el símbolo del sistema donde ejecuta el comando.
Para establecer variables de entorno globalmente para que persistan más allá del simple símbolo del sistema, puede encontrar la herramienta desde el Sistema en el Panel de control (o escribiendo 'entorno' en el cuadro de búsqueda en el menú de inicio).
fuente
set NODE_ENV=production && node app
. Más convenientemente configurar supackage.json
consecuencia:"scripts": { "start": "set NODE_ENV=production && node app" }
.echo %NODE_ENV%
para verificar su valor actual.cross-env
es la mejor solución a este problema si su equipo trabaja en sistemas operativos mixtos. La respuesta de @MoOx sería mi elección como respuesta a esta pregunta.Acabo de encontrar un buen paquete Node.js que puede ayudar mucho a definir variables de entorno utilizando una sintaxis única, multiplataforma.
https://www.npmjs.com/package/cross-env
Te permite escribir algo como esto:
¡Lo cual es bastante conveniente! ¡Ya no hay comandos específicos de Windows o Unix!
fuente
En PowerShell:
fuente
set NODE_ENV=production
No funcionó para mí en PowerShell pero esto sí. ¡Gracias!$env:NODE_ENV="development"; gulp runMytask
. Tenga en cuenta el punto y coma allí. El archivo gulp puede usar lógica condicional en process.env.NODE_ENV. A menos que lo configure, será indefinido.cross-env NODE_ENV=production
opción es realmente una mejor solución si ejecuta comandos npm desde package.json que requieren que se configure el entorno. Es demasiado fácil dejar el entorno establecido en dev / prod después de usar la opción $ env: NODE_ENVSería ideal si pudiera establecer parámetros en la misma línea que su llamada para iniciar Node.js en Windows. Mire cuidadosamente lo siguiente y ejecútelo exactamente como se indica:
Tienes estas dos opciones:
En la línea de comando:
o
El truco para que funcione en Windows es que necesita eliminar el espacio en blanco antes y después de "&&". Configura tu archivo package.json con start_windows (ver más abajo) a continuación. Luego ejecute "npm run start_windows" en la línea de comando.
fuente
Puedes usar
Probablemente sea la mejor manera de hacerlo, porque es compatible tanto en Windows como en Unix.
De la documentación de npm run-script :
fuente
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
El--
es obligatorio . Reemplacenode -e 'console.log(process.env.NODE_ENV)'
con cualquier comando que desee.npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
y ... no pasó nada. No estoy seguro de que este método funcione en Windows.Si está utilizando Visual Studio con NTVS, puede establecer las variables de entorno en la página de propiedades del proyecto:
Como puede ver, los menús desplegables de Configuración y Plataforma están deshabilitados (no he investigado demasiado por qué esto es así), pero si edita su
.njsproj
archivo de la siguiente manera:El menú desplegable 'Debug / Release' controlará cómo se configura la variable antes de iniciar Node.js.
fuente
Escribí un módulo win-node-env con el que puedes ejecutar tu comando como lo harías en * nix.
Funciona creando un
NODE_ENV.cmd
que establece laNODE_ENV
variable de entorno y genera un proceso hijo 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.
fuente
Mi experiencia con Node.js en Windows 7 de 64 bits en Visual Studio 2013 es que necesita usar
desde una ventana cmd. Y debe reiniciar Visual Studio para que se reconozca el nuevo valor.
La sintaxis establecida solo dura la duración de la ventana de cmd en la que se establece.
Prueba simple en Node.js:
Devuelve 'indefinido' cuando usa set, y devolverá 'desarrollo' si usa setx y reinicia Visual Studio.
fuente
cmd
- No es PowerShell? Ugh, entra en Windows, reúnelo.Aquí está el método de línea sin comando:
En Windows 7 o 10, escriba entorno en el cuadro de búsqueda del menú de inicio y seleccione Editar las variables de entorno del sistema.
Alternativamente, navegue a Panel de control \ Sistema y seguridad \ Sistema y haga clic en Configuración avanzada del sistema
Esto debería abrir el cuadro de diálogo Propiedades del sistema con la pestaña Avanzado seleccionada. En la parte inferior, verá un botón Variables de entorno ... Haz clic aquí.
Se abrirá el cuadro de diálogo Variables de entorno.
En la parte inferior, en Variables del sistema, seleccione Nuevo ... Esto abrirá el cuadro de diálogo Nueva variable del sistema.
Ingrese el nombre y el valor de la variable y haga clic en Aceptar.
Deberá cerrar todas las solicitudes de cmd y reiniciar su servidor para que la nueva variable esté disponible para process.env. Si aún no aparece, reinicie su máquina.
fuente
Solo para aclarar, y para cualquier otra persona que pueda estar arrancándose el cabello ...
Si está utilizando git bash en Windows ,
set node_env=production&& node whatever.js
parece que no funciona . En su lugar, use el cmd nativo. Luego, usando losset node_env=production&& node whatever.js
trabajos como se esperaba.Mi caso de uso:
Me desarrollo en Windows porque mi flujo de trabajo es mucho más rápido, pero necesitaba asegurarme de que el middleware específico de desarrollo de mi aplicación no se activara en el entorno de producción.
fuente
Para ejecutar su aplicación en PowerShell (ya
&&
que no está permitido):Tenga en cuenta que la salida de texto de lo que está haciendo el servidor se suprime, y no estoy seguro de si eso se puede solucionar. (Ampliando la respuesta de @ jsalonen).
fuente
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
primero en tipo powershell
luego escribe
Funcionará perfectamente mostrando todas las salidas.
fuente
Para múltiples variables de entorno, un
.env
archivo es más conveniente:Es fácil de usar con
dotenv-safe
:npm install --save dotenv-safe
.index.js
) y úselo directamente con elprocess.env
comando :No olvide ignorar el
.env
archivo en su VCS .Luego, su programa falla rápidamente si una variable "definida" en no
.env.example
se establece como una variable de entorno o en.env
.fuente
En caso de que esté utilizando el terminal GITBASH
"set NODE_ENV=production"
no funcionará, lo que puede hacer es escribir "exportarNODE_ENV=production"
fuente
esto no establecerá una variable pero es útil en muchos casos. No recomendaré usar esto para la producción, pero debería estar bien si estás jugando con npm.
fuente
Utilicé el script npm para ejecutar una tarea de trago sin "&&"
NODE_ENV = testcases npm run seed-db
fuente
Reinicie el código VS si NODE_ENV o cualquier otra variable de entorno no proporciona el valor correcto. Esto debería funcionar después de reiniciar.
fuente