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?
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?
Respuestas:
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).
set NODE_ENV=production && node app
. Más convenientemente configurar su package.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:
cross-env NODE_ENV=production my-command
¡Lo cual es bastante conveniente! ¡Ya no hay comandos específicos de Windows o Unix!
En PowerShell:
$env:NODE_ENV="production"
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_ENV
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.
//package.json
"scripts": {
"start": "node index.js"
"start_windows": "set NODE_ENV=production&&node index.js"
}
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.
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.
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:
<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.
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.cmd
que establece la NODE_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.
npm install -g win-node-env
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.
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.
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.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.
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).
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Para múltiples variables de entorno, un .env
archivo 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
:
npm install --save dotenv-safe
.index.js
) y úselo directamente con el process.env
comando :require('dotenv').load()
console.log(process.env.DB_HOST)
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
.
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.
npm install --production
Utilicé el script npm para ejecutar una tarea de trago sin "&&"
NODE_ENV = testcases npm run seed-db
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.