¿Cómo puedo configurar NODE_ENV = production en Windows?

340

En Ubuntu es bastante simple; Puedo ejecutar la aplicación usando:

$ NODE_ENV=production node myapp/app.js

Sin embargo, esto no funciona en Windows. ¿Hay un archivo de configuración donde puedo establecer el atributo?

Jack
fuente
Para una solución multiplataforma, puede encontrar la respuesta stackoverflow.com/a/57509175/11127383
Daniel Danielecki

Respuestas:

485

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

Jani Hartikainen
fuente
112
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.

https://www.npmjs.com/package/cross-env

Te permite escribir algo como esto:

cross-env NODE_ENV=production my-command

¡Lo cual es bastante conveniente! ¡Ya no hay comandos específicos de Windows o Unix!

MoOx
fuente
25
Si bien la primera respuesta es cierta. Creo que esta respuesta es muy confiable y debería usarse
d4rklit3
¡Esta es una gran solución!
Kirill Gusyatin
Simple y resuelve perfectamente mi problema. Pude construir solo en Linux. Esto resolvió tanto Linux como Windows.
tista3
Esta respuesta merece más amor, debería ser la aceptada :)
Honza Kalfus
Esta es la mejor respuesta para mí también
knaos
166

En PowerShell:

$env:NODE_ENV="production"
jsalonen
fuente
44
PD: no olvides los $ y las comillas;)
George
66
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:

  1. En la línea de comando:

    set NODE_ENV=production&&npm start

    o

    set NODE_ENV=production&&node index.js
  2. 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.

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }
Alexander Mills
fuente
1
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.

De la documentación de npm run-script :

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.

Brieuc P
fuente
3
¿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 ...
MoOx
3
@JonasKello Usarías esto: npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'El --es obligatorio . Reemplace node -e 'console.log(process.env.NODE_ENV)'con cualquier comando que desee.
Pauan
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:

Propiedades del proyecto Visual Studio NTVS

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:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

El menú desplegable 'Debug / Release' controlará cómo se configura la variable antes de iniciar Node.js.

Pablo
fuente
12

Escribí un módulo win-node-env con el que puedes ejecutar tu comando como lo harías en * nix.

NODE_ENV=production node myapp/app.js

Funciona creando un NODE_ENV.cmdque establece la NODE_ENVvariable 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.

npm install -g win-node-env
laggingreflex
fuente
¡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.

Prueba simple en Node.js:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

Devuelve 'indefinido' cuando usa set, y devolverá 'desarrollo' si usa setx y reinicia Visual Studio.

edhubbell
fuente
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í.

Cuadro de diálogo del sistema

Se abrirá el cuadro de diálogo Variables de entorno.

Cuadro de diálogo variable de entorno

En la parte inferior, en Variables del sistema, seleccione Nuevo ... Esto abrirá el cuadro de diálogo Nueva variable del sistema.

ingrese la descripción de la imagen aquí

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.

Mattatat-tat
fuente
2
¡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.js parece 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.

pstrawberriedev
fuente
6

Para ejecutar su aplicación en PowerShell (ya &&que no está permitido):

($env:NODE_ENV="production") -and (node myapp/app.js)

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

Cameron Yick
fuente
No funcionó para mí:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Evandro Pomatti
4

primero en tipo powershell

$env:NODE_ENV="production"

luego escribe

node fileName.js

Funcionará perfectamente mostrando todas las salidas.

Abhinav
fuente
2

Para múltiples variables de entorno, un .envarchivo es más conveniente:

# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD

Es fácil de usar con dotenv-safe:

  1. Instalar con npm install --save dotenv-safe.
  2. Inclúyalo en su código (mejor al comienzo del index.js) y úselo directamente con el process.envcomando :
require('dotenv').load()
console.log(process.env.DB_HOST)   

No olvide ignorar el .envarchivo en su VCS .

Luego, su programa falla rápidamente si una variable "definida" en no .env.examplese establece como una variable de entorno o en .env.

Dominik
fuente
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"

Bozhinovski
fuente
0

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.

npm install --production
Bar Horing
fuente
0

Utilicé el script npm para ejecutar una tarea de trago sin "&&"

NODE_ENV = testcases npm run seed-db

Mari Orlova
fuente
0

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.

Rakesh Pahuja
fuente