¿Cómo configurar algunas variables de entorno desde adentro package.json
para usarlas con npm start
comandos similares?
Esto es lo que tengo actualmente en mi package.json
:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
Quiero conjunto de variables de entorno (como NODE_ENV
) en el script de inicio sin dejar de ser capaz de iniciar la aplicación con solo un comando, npm start
.
node.js
npm
package.json
npm-scripts
dev.meghraj
fuente
fuente
Respuestas:
Establezca la variable de entorno en el comando de script:
Luego úsalo
process.env.NODE_ENV
en tu aplicación.Nota:
env
asegura que funcione en todas las plataformas. Puede omitirlo si solo le importa Mac / Linux.fuente
set NODE_ENV=test&& mocha --reporter spec
: no hay espacio entre la prueba y && a propósito."test": "NODE_ENV=test mocha --reporter spec"
no funcionará en sistemas Windows.env NODE_ENV=test mocha --reporter spec
usará la variable de entorno declarada de forma nativa multiplataforma, pero la clave es que npm la usa ad hoc y de una sola vez, solo para la ejecución del script npm. (No está configurado ni exportado para referencia futura). Mientras esté ejecutando su comando desde el script npm, no hay problema. Además, el "&&" debe eliminarse al hacerlo de esta manera.Simplemente use el paquete NPM cross-env . Muy facil. Funciona en Windows, Linux y todos los entornos. Tenga en cuenta que no utiliza && para pasar a la siguiente tarea. Simplemente configura el entorno y luego comienza la siguiente tarea. Gracias a @mikekidder por la sugerencia en uno de los comentarios aquí.
De la documentación:
Tenga en cuenta que si desea establecer varios vars globales, simplemente dígalos en sucesión, seguido de su comando para que se ejecute.
En definitiva, el comando que se ejecuta (usando spawn) es:
La
NODE_ENV
variable de entorno se establecerá mediante cross-envfuente
"test": "cross-env TS_NODE_COMPILER_OPTIONS='{\\\"module\\\":\\\"commonjs\\\"}' mocha"
env
ocross-env
? Por un lado, env no requiere que instale nada y, por otro lado,cross-env
es más popular. ¿Alguien puede confirmar sienv
funciona en todas las plataformas?env
no funciona como está en todas las plataformas, de ahí la razón decross-env
existir. Solo utilízalocross-env
y listo.Debido a que a menudo me encuentro trabajando con múltiples variables de entorno, me resulta útil mantenerlas en un
.env
archivo separado (asegúrese de ignorar esto desde su control de origen).Luego anteponga
export $(cat .env | xargs) &&
su comando de script.Ejemplo:
Para una prueba, puede ver las variables env ejecutando
npm run env
(linux) onpm run env-windows
(windows).fuente
&&
para que funcione: si tiene varios archivos .env, puede ser un poco más difícil de mantener. Su respuesta me inspiró a preparar esta sugerencia: stackoverflow.com/questions/25112510/…Solo quería agregar mis dos centavos aquí para futuros exploradores de nodos. En mi Ubuntu 14.04
NODE_ENV=test
no funcionó, tuve que usarlo yexport NODE_ENV=test
luegoNODE_ENV=test
comenzó a funcionar también, raro.En Windows, como se ha dicho, debe usar,
set NODE_ENV=test
pero para una solución multiplataforma, la biblioteca cross-env no pareció funcionar y realmente necesita una biblioteca para hacer esto:Las barras verticales son necesarias ya que de lo contrario Windows se bloquearía con el
export NODE_ENV
comando no reconocido : D. No sé sobre el espacio final, pero solo para asegurarme de que también los eliminé.fuente
&&
?NODE_ENV=test yadda
medios "correryadda
, estableciendoNODE_ENV
dentroyadda
. 's variables de entornoNODE_ENV=test && yadda
significa 'establecerNODE_ENV
dentro del entorno local, pero no lo exportan, a continuación, ejecuteyadda
'.NODE_ENV=test yadda
es el método preferido.NODE_ENV=test && npm run test
algo similar. Hice una mejor solución usandoprocess.env["NODE_ENV"] = "testing";
dentro de mi archivo testhelper.js.&&
las variables de entorno perdidas, establecer las variables de entorno sin exportación funciona solo en el comando actual (que no es nada). para ejecutar el comando con la variable de entorno sin exportar u hacer:NODE_ENV=test npm run test
. Finalmente, la razón por la que funcionó después de exportar, es porque su variable ahora está disponible (exportada) en la sesión, su NODE_ENV sin exportación no estaba haciendo nada.Pruebe esto en Windows reemplazando
YOURENV
:fuente
de repente descubrí que actionhero está usando el siguiente código, que resolvió mi problema simplemente pasando la
--NODE_ENV=production
opción de comando de inicio de script.Realmente agradecería aceptar la respuesta de otra persona que conozca mejor la forma de configurar las variables de entorno en package.json o init script o algo así, donde la aplicación ha sido arrancada por otra persona.
fuente
Para un conjunto más grande de variables de entorno o cuando desee reutilizarlas, puede usarlas
env-cmd
../.env
expediente:./package.json
:fuente
process.env.ENV1
mongod --dbpath ~/data/db
. Quiero ejecutar algo asínpm mongodb
y eso obtendrá la variable de entorno dbpath y ejecutará el mondodb como siempre ... y ... quiero compartirlo con otros miembros.Aunque no estoy respondiendo directamente a la pregunta, me gustaría compartir una idea además de las otras respuestas. De lo que obtuve, cada uno de estos ofrecería cierto nivel de complejidad para lograr una independencia de plataforma cruzada.
En mi caso, todo lo que quería, originalmente, era establecer una variable para controlar si proteger o no el servidor con autenticación JWT (para fines de desarrollo)
Después de leer las respuestas, decidí simplemente crear 2 archivos diferentes, con la autenticación activada y desactivada respectivamente.
Los archivos son simplemente envoltorios que llaman al archivo index.js original (al que le cambié el nombre
appbootstrapper.js
):Quizás esto pueda ayudar a alguien más
fuente
fuente
Esto funcionará en la consola de Windows :
npm run aaa
salida:
test
Vea esta respuesta para más detalles.
fuente
set TMP=test&& npm run bbb
. El espacio antes&&
también cound como parte de la continuaciónNODE_ENV
de cadena"
.usa git bash en windows. Git Bash procesa los comandos de manera diferente que cmd.
La mayoría de las indicaciones de comando de Windows se ahogarán cuando establezca variables de entorno con NODE_ENV = producción como esa. (La excepción es Bash en Windows, que usa Bash nativo). Del mismo modo, hay una diferencia en cómo Windows y los comandos POSIX utilizan variables de entorno. Con POSIX, usa: $ ENV_VAR y en las ventanas usa% ENV_VAR%. - documento cross-env
use el paquete dotenv para declarar las variables env
fuente
No debe establecer variables ENV en
package.json
. actionhero utilizaNODE_ENV
para permitirte cambiar las opciones de configuración que se cargan desde los archivos en./config
. Mira el archivo de configuración de redis y vea cómo se utiliza NODE_ENV para cambiar las opciones de la base de datos enNODE_ENV=test
Si desea usar otras variables ENV para configurar cosas (tal vez el puerto HTTP), aún no necesita cambiar nada
package.json
. Por ejemplo, si configuraPORT=1234
en ENV y desea usarlo como el puerto HTTPNODE_ENV=production
, solo haga referencia a eso en el archivo de configuración relevante, IE:fuente
npm start
comando. Utilizando el fragmento anterior, si desea ejecutar el servidor a través del puerto ENV sería:export PORT=1234; npm start
. Puede agregar tantas declaraciones ENV como necesite, pero no pertenecen al archivo package.json. Si usted está preocupado acerca de asegurarse de que existan se debe utilizar por defecto en el fichero de configuración:port: process.env.PORT || 8080
.NODE_ENV=test npm start
o configurarlos mediante el shellnpm (e yarn) pasa muchos datos de package.json a scripts como variables de entorno. Use
npm run env
para verlos a todos. Esto está documentado en https://docs.npmjs.com/misc/scripts#environment y no es solo para scripts de "ciclo de vida",prepublish
sino también para cualquier script ejecutado pornpm run
.Puede acceder a estos códigos internos (por ejemplo,
process.env.npm_package_config_port
en JS), pero ya están disponibles para el shell que ejecuta los scripts, por lo que también puede acceder a ellos como$npm_...
expansiones en los "scripts" (¿la sintaxis de Unix podría no funcionar en Windows?).La sección "config" parece destinada a este uso:
Una cualidad importante de estos campos de "configuración" es que los usuarios pueden anularlos sin modificar package.json !
Ver npm config y yarn config docs.
Parece que el hilo se lee
~/.npmrc
de maneranpm config set
afecta a ambos, peroyarn config set
escribe a~/.yarnrc
, por lo que sólo hilo de lo verá :-(fuente
¡La respuesta de @ luke fue casi la que necesitaba! Gracias.
Como la respuesta seleccionada es muy sencilla (y correcta), pero antigua, me gustaría ofrecer una alternativa para importar variables desde un archivo separado .env al ejecutar sus scripts y corregir algunas limitaciones a la respuesta de Luke. Prueba esto:
::: archivo .env :::
Luego, en su paquete json, creará un script que establecerá las variables y lo ejecutará antes de los scripts que los necesita:
::: package.json :::
Algunas observaciones
La expresión regular en el comando grep'ed cat borrará los comentarios y las líneas vacías.
El
&&
no necesita ser "pegado" anpm run set-env
, ya que se requeriría si estuviera configurando las variables en el mismo comando.Si está utilizando hilo, puede ver una advertencia, puede cambiarlo
yarn set-env
o usarlonpm run set-env --scripts-prepend-node-path &&
.Diferentes ambientes
Otra ventaja al usarlo es que puede tener diferentes variables de entorno.
fuente