node.js - variable - set node_env npm
¿Cómo puedo configurar NODE_ENV=producción en Windows? (15)
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?
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!
Aquí está el método de la línea que no es de 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.
O bien, navegue hasta 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 ... Haga clic en este
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 indicaciones 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.
En PowerShell:
$env:NODE_ENV="production"
En caso de que esté utilizando el terminal GITBASH, "set NODE_ENV=production"
no funcionará, lo que puede hacer es escribir "export NODE_ENV=production"
Escribí un módulo win-node-env con el que puedes ejecutar tu comando como lo harías en * nix.
# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
Funciona creando un NODE_ENV.cmd
que establece la variable de entorno NODE_ENV
y genera un proceso secundario con el resto del comando y sus argumentos.
Simplemente instálelo (globalmente) y ejecute los comandos de script npm, esto debería hacer que funcionen automáticamente.
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD
Las versiones actuales de Windows usan Powershell como shell predeterminado, así que usa:
$env:NODE_ENV="production"
Per @ jsalonen responde abajo. 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 configurar las variables de entorno de manera global para que se mantengan más allá del simple símbolo del sistema, puede encontrar la herramienta en Sistema en el Panel de control (o escribiendo "entorno" en el cuadro de búsqueda en el menú de inicio).
Mi experiencia al usar 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 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.
Para múltiples variables de entorno, un archivo .env
es más conveniente:
require(''dotenv'').load()
console.log(process.env.DB_HOST)
$env:NODE_ENV="production"
Es fácil de usar con dotenv-safe
:
- Instale con
npm install --save dotenv-safe
. - Inclúyalo en su código (lo mejor al inicio de
index.js
) y utilícelo directamente con el comandoprocess.env
:
node fileName.js
No olvide ignorar el archivo .env
en su VCS .
Luego, su programa falla rápidamente si una variable "definida" en .env.example
se establece como una variable de entorno o en .env
.
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 está suprimida, y no estoy seguro de si eso se puede arreglar. (Ampliando la respuesta de @Jsalonen.)
Puedes usar
npm run env NODE_ENV=production
Probablemente sea la mejor manera de hacerlo, porque es compatible tanto con Windows como con Unix.
De la documentación del script de ejecución de npm :
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.
Sería ideal si pudiera establecer parámetros en la misma línea que su llamada para iniciar Node.js en Windows. Mire lo siguiente con cuidado 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
Ejecute "npm run start_windows" en la línea de comando con su archivo package.json configurado como se muestra a continuación
//package.json "scripts": { "start": "node index.js" "start_windows": "set NODE_ENV=production&&node index.js" }
El truco para que funcione en Windows es que necesita eliminar los espacios en blanco antes y después de "&&".
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 desplegables de Configuración y Plataforma están deshabilitados (no he analizado por qué esto es así), pero si edita su archivo .njsproj
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 establece la variable antes de iniciar Node.js.
Solo para aclarar, y para cualquier otra persona que pueda estar arrancando su cabello ...
Si está utilizando git bash en Windows , set node_env=production&& node whatever.js
no funciona . En su lugar, utilice el cmd nativo. Luego, utilizando set node_env=production&& node whatever.js
funciona 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 para el desarrollo de mi aplicación no se estaba activando en el entorno de producción.
esto no establecerá una variable pero es útil en muchos casos. No recomendaré usar esto para producción, pero debería estar bien si estás jugando con npm.
npm install --production
primero en el tipo de PowerShell
NODE_ENV=production node myapp/app.js
entonces escribe
npm install -g win-node-env
Funcionará perfectamente mostrando todas las salidas.