假设我们有一个.env
文件,其中指定了一些变量:
AWS_PROFILE=hsz
ENVIRONMENT=development
还定义了一个简单的npm
任务:
{
"name": "project",
"version": "0.0.1",
"scripts": {
"deploy": "sls deploy"
}
}
但是npm run deploy
忽略了.env
的定义。
可以使用better-npm-run
来解决,例如:
{
"name": "project",
"version": "0.0.2",
"scripts": {
"deploy": "bnr deploy"
},
"betterScripts": {
"deploy": "sls deploy"
},
"devDependencies": {
"better-npm-run": "^0.1.1",
}
}
但这看起来很麻烦-尤其是当我们有10个以上的任务时。
是否有更好的方式始终加载.env
而不通过better-npm-run
代理所有任务?
答案 0 :(得分:2)
有点丑陋,但是您可以尝试执行以下操作:
"scripts": {
"deploy": "export $(cat .env | xargs) && sls deploy"
}
这将在运行.env
之前从sls deploy
文件中导出所有环境变量。
this answer中的这种技术有些变化。
不是很干净,但是可以避免使用额外的模块。
答案 1 :(得分:0)
在项目本身中维护并加载所有特定于环境的配置。
dev.js
module.exports = {
"host":"dev.com"
}
prod.js
module.exports = {
"host":"prod.com"
}
config.js-将基于process.env.ENV变量解析配置的主文件。
const dev = require('./dev');
const prod = require('./prod');
let envObject = {};
const env = process.env.ENV || "dev";
switch(env) {
case 'prod':
envObject = prod;
break;
default:
envObject = dev;
}
envObject['ENV'] = env;
process.env = Object.assign(process.env,envObject); // Optional if you prefer to add them into process environment otherwise `require('./config')` where you need configuration.
module.exports = envObject;
index.js-每次项目启动时都会调用节点项目根文件
const config = require('./config');
console.log('config object => ',config.host);
package.json
{
"name": "project",
"version": "0.0.2",
"scripts": {
"deploy": "sls deploy"
}
}
运行您的node.js代码
产品环境ENV=prod npm run deploy
;
开发环境-npm run deploy
;
默认环境在dev
中设置为./config.js
使用这种简单的做法,您不需要任何npm模块来管理您的环境配置。
答案 2 :(得分:0)
在执行npm脚本之前,可以使用env-cmd npm软件包设置从.env文件加载的环境变量。
npm i env-cmd -D
{
"scripts": {
"deploy": "env-cmd sls deploy"
}
}