侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

Egg06 - 多环境配置

barwe
2022-04-16 / 0 评论 / 0 点赞 / 722 阅读 / 1,224 字
温馨提示:
本文最后更新于 2022-04-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

多环境配置

模板提供的默认配置文件位置如下:

config/
|-  config.default.ts
|-  config.local.ts
|- config.prod.ts
|- plugin.ts

config.default.ts 是默认的配置文件,所有环境都会加载这个文件。

例如本地开发环境下会加载 config.default.tsconfig.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

生成配置文件时会自动隐藏部分字段,例如密码等。

0

评论区