配置管理常见方案
- 平台管理配置 启动时指定
应用构建时将当前环境配置放入包中,启动时指定配置。此种方案缺点在于无法一次构建多次部署,另外本地开发环境使用配置麻烦。 - 平台管理配置 环境变量传入
应用启动时将当前环境配置通过环境变量传入,虽然比较优雅,但缺点是框架对运维要求较高,需部署平台支持,同时开发环境也有痛点。 - 代码管理配置 配置即代码
代码中添加多个环境配置,应用启动时传入当前环境参数。缺点在于无法全局配置,而且必须修改代码。
Egg框架采用配置即代码的方案,配置变更应经过review后才能发布,应用可部署在多个环境,仅需指定运行环境。
Egg框架提供了强大且可配置的配置功能,可自动合并应用、插件、框架的配置,并按顺序覆盖,可根据环境维护不同的配置。
运行环境
Egg框架使用代码的方式配置当前应用的运行方式,Egg约定所有配置文件都存放在根目录下的config
文件夹下。
Egg框架内支持根据运行环境来加载配置,因此需定义多个不同运行环境的配置文件。
Egg框架中有两种指定运行环境的方式
- 通过配置文件
config/env
文件指定,config/env
文件一般会通过构建工具来生成。
例如:指定当前运行环境为线上生产环境prod
$ vim config/env
//config/env
prod
- 通过
EGG_SERVER_ENV
环境变量来指定运行环境
例如:生产环境下启动应用时指定环境变量为prod
$ EGG_SERVER_ENV=prod npm start
可使用app.config.env
获取应用当前的运行环境
console.log(app.config.env);
配置文件
指定环境变量后启动应用,此时会自动根据环境变量名称去寻找对应的配置文件,配置文件可分为两种类型:默认配置文件、环境配置文件
-
默认配置文件:
config/config.default.js
默认配置文件在所有环境中都会被加载 -
环境配置文件:
config/config.{env}.js
例如:创建常用的环境配置文件
配置文件 | 描述 |
---|---|
config.local.js | 本地环境配置 |
config.dev.js | 开发环境配置 |
config.prod.js | 生产环境配置 |
config.unittest.js | 单元测试环境配置 |
环境配置文件会覆盖默认配置文件中同名配置项
同名配置覆盖配置写法
配置文件需返回一个Object对象,应用可将自身业务配置放到这里进行管理。配置文件的写法可分为三种
- 使用
module.exports
导入Object对象 - 使用
exports.key = value
导入键值对 - 使用
module.exports
传入appInfo
返回Object对象
$ vim config/config.dev.js
module.exports = appInfo => {
return {
}
};
内置的appInfo
对象是EggAppInfo
类的实例,appInfo
属性包括:
属性 | 描述 |
---|---|
appInfo.pkg | package.json |
appInfo.name | 应用程名称,同pkg.name。 |
appInfo.baseDir | 应用代码目录 |
appInfo.HOME | 用户家目录 |
appInfo.root | 应用根目录,仅在local和unittest环境下为baseDir,其它均为HOME。 |
获取配置
可使用app.config
获取所有的配置项,若在控制器、服务中可使用this.app.config
获取配置。
例如:自定义开发环境配置,配置字节跳动小程序所使用的参数。
$ vim config/env
dev
$ vim config/config.dev.js
'use strict';
module.exports = appInfo=>{
return {
bytedance:{
microapp:{
appId:"",
appSecret:"",
code2session:"https://developer.toutiao.com/api/apps/jscode2session"
}
}
};
};
网友评论