scripts - npm run test
Cómo establecer variables de entorno desde dentro de package.json (6)
Aunque no responde directamente la pregunta, me gustaría compartir una idea además de las otras respuestas. Por lo que obtuve, cada uno de estos ofrecería algún nivel de complejidad para lograr la independencia de plataformas cruzadas.
En mi escenario, todo lo que quería, originalmente, para establecer una variable para controlar si asegurar 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.
"scripts": {
"dev": "nodemon --debug index_auth.js",
"devna": "nodemon --debug index_no_auth.js",
}
Los archivos son simplemente contenedores que llaman al archivo index.js original (que renombré a appbootstrapper.js):
//index_no_auth.js authentication turned off
const bootstrapper = require(''./appbootstrapper'');
bootstrapper(false);
//index_auth.js authentication turned on
const bootstrapper = require(''./appbootstrapper'');
bootstrapper(true);
class AppBootStrapper {
init(useauth) {
//real initialization
}
}
Quizás esto puede ayudar a alguien más
Cómo configurar algunas variables de entorno desde dentro de package.json
para ser usadas con npm start
como comandos
Esto es lo que tengo actualmente en mi package.json
:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
Aquí quiero establecer variables de entorno (como NODE_ENV
) en el script de inicio, mientras sigo siendo capaz de iniciar la aplicación con solo un comando, npm start
.
Establezca la variable de entorno en el comando de script:
...
"scripts": {
"start": "node app.js",
"test": "NODE_ENV=test mocha --reporter spec"
},
...
Luego use process.env.NODE_ENV
en su aplicación.
Nota: Esto es solo para Mac y Linux . Para Windows, consulte los comentarios.
No debe establecer variables ENV en package.json
. actionhero usa NODE_ENV
para permitirle cambiar las opciones de configuración que se cargan desde los archivos en ./config
. Consulte el archivo de configuración de redis y vea cómo se utiliza NODE_ENV para cambiar las opciones de la base de datos en NODE_ENV=test
Si desea usar otras variables ENV para configurar cosas (tal vez el puerto HTTP), aún no necesita cambiar nada en package.json
. Por ejemplo, si configura PORT=1234
en ENV y desea usarlo como puerto HTTP en NODE_ENV=production
, solo haga referencia a eso en el archivo de configuración relevante, IE:
# in config/servers/web.js
exports.production = {
servers: {
web: function(api){
return {
port: process.env.PORT
}
}
}
}
Solo quería agregar mis dos centavos aquí para futuros Node-exploradores. En mi Ubuntu 14.04 la NODE_ENV=test
no funcionó, tuve que usar export NODE_ENV=test
después de lo cual NODE_ENV=test
comenzó a funcionar también, raro.
En Windows, como se ha dicho, tiene que usar set NODE_ENV=test
pero para una solución multiplataforma, la biblioteca de cross-env no parece funcionar y realmente necesita una biblioteca para hacer esto:
export NODE_ENV=test|| set NODE_ENV=test&& yadda yadda
Las barras verticales son necesarias, ya que de lo contrario Windows se bloqueará en el comando export NODE_ENV
no reconocido: D. No sé sobre el espacio final, solo para asegurarme de que también los quité.
Solo use el paquete de NPM cross-env . Muy facil. Funciona en Windows, Linux y todos los entornos. Tenga en cuenta que no usa && para pasar a la siguiente tarea. Simplemente configura el env y luego comienza la siguiente tarea. mikekidder a mikekidder por la sugerencia en uno de los comentarios aquí.
De la documentación:
{
"scripts": {
"build": "cross-env NODE_ENV=production OTHERFLAG=myValue webpack --config build/webpack.config.js"
}
}
Tenga en cuenta que si desea establecer múltiples variables globales, solo debe indicarlas en sucesión, seguidas de su comando para que se ejecuten.
En última instancia, el comando que se ejecuta (usando spawn) es:
webpack --config build/webpack.config.js
La variable de entorno NODE_ENV
se establecerá mediante cross-env
de repente encontré que actionhero está usando el código siguiente, que resolvió mi problema simplemente pasando --NODE_ENV=production
en la opción de comando de inicio de secuencia de comandos.
if(argv[''NODE_ENV''] != null){
api.env = argv[''NODE_ENV''];
} else if(process.env.NODE_ENV != null){
api.env = process.env.NODE_ENV;
}
Realmente agradecería aceptar la respuesta de otra persona que conoce mejor manera de establecer variables de entorno en el script package.json o init o algo así como, donde la aplicación se inicia por otra persona.