多环境配置
模板提供的默认配置文件位置如下:
config/
|- config.default.ts
|- config.local.ts
|- config.prod.ts
|- plugin.ts
config.default.ts 是默认的配置文件,所有环境都会加载这个文件。
例如本地开发环境下会加载 config.default.ts 和 config.local.ts 这两个文件。
默认配置文件的默认导出是一个函数:
export default (appInfo: EggAppInfo) => { /* ... */ }
其参数的接口如下:
interface EggAppInfo {
pkg: any; // package.json
name: string; // the application name from package.json
baseDir: string; // current directory of application
env: 'local' | 'unittest' | 'prod' | string; // equals to serverEnv
HOME: string; // home directory of the OS
root: string; // baseDir when local and unittest, HOME when other environment
}
可以看到我们可以访问的属性有:
pkg
: package.json 对象name
: package.json 中定义的应用名称baseDir
: 应用代码保存的位置env
: 当前应用运行的环境名称HOME
: 运行应用的用户的用户目录root
: 应用的根目录,当环境为 local 或者 unittest 时等于baseDir
,其它环境等于HOME
例如应用的运行日志的默认保存位置就是${appInfo.root}/logs
,这意味着:
- local/unittest 环境下日志会保存到项目根目录下
- prod 环境下日志会保存到用户的家目录下
配置加载顺序
插件、框架、应用都可以设置配置信息,但是有优先级。
例如生产环境下优先级从低到高是:
- 插件的 config.default.ts
- 框架的 config.default.ts
- 应用的 config.default.ts
- 插件的 config.prod.ts
- 框架的 config.prod.ts
- 应用的 config.prod.ts
应用配置是框架使用者写的配置,框架配置是框架开发者写的配置。
总之就是,用户的自定义配置优先、具名配置优先。
插件配置之间的顺序与它们的加载顺序有关,不过不是特别重要。
合并规则
合并时使用深拷贝,数组会直接覆盖而不是合并。
例如默认配置是[1,2]
,开发环境是[3]
,合并结果为[3]
,而不是[1,2,3]
。
配置结果
应用启动后会将最终的合并结果保存到下面这两个地方:
- run/application_config.json for worker
- run/agent_config.json for agent
生成配置文件时会自动隐藏部分字段,例如密码等。
评论区