美文网首页
Egg Config

Egg Config

作者: JunChow520 | 来源:发表于2020-05-22 16:39 被阅读0次

    配置管理常见方案

    • 平台管理配置 启动时指定
      应用构建时将当前环境配置放入包中,启动时指定配置。此种方案缺点在于无法一次构建多次部署,另外本地开发环境使用配置麻烦。
    • 平台管理配置 环境变量传入
      应用启动时将当前环境配置通过环境变量传入,虽然比较优雅,但缺点是框架对运维要求较高,需部署平台支持,同时开发环境也有痛点。
    • 代码管理配置 配置即代码
      代码中添加多个环境配置,应用启动时传入当前环境参数。缺点在于无法全局配置,而且必须修改代码。

    Egg框架采用配置即代码的方案,配置变更应经过review后才能发布,应用可部署在多个环境,仅需指定运行环境。

    Egg框架提供了强大且可配置的配置功能,可自动合并应用、插件、框架的配置,并按顺序覆盖,可根据环境维护不同的配置。

    运行环境

    Egg框架使用代码的方式配置当前应用的运行方式,Egg约定所有配置文件都存放在根目录下的config文件夹下。

    Egg框架内支持根据运行环境来加载配置,因此需定义多个不同运行环境的配置文件。

    Egg框架中有两种指定运行环境的方式

    1. 通过配置文件config/env文件指定,config/env文件一般会通过构建工具来生成。

    例如:指定当前运行环境为线上生产环境prod

    $ vim config/env
    
    //config/env
    prod
    
    1. 通过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对象,应用可将自身业务配置放到这里进行管理。配置文件的写法可分为三种

    1. 使用module.exports导入Object对象
    2. 使用exports.key = value导入键值对
    3. 使用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"
                }
            }
        };
    };
    

    相关文章

      网友评论

          本文标题:Egg Config

          本文链接:https://www.haomeiwen.com/subject/pnnqahtx.html