在spring boot的项目中,我们可以根据 spring.profiles.active参数设置当前启用的配置文件。这样,我们可以很方便的切换环境。
于是在Koa项目中,我们也模仿srping boot写一个配置文件加载的函数。
1.设计好目录结构
参考maven项目,配置文件的文件夹名称 resources,项目代码目录 server (这是一个nextjs项目,否则命名src会更好)

2.读取配置文件
在server文件夹下,创建 bootstrap文件夹,存放一些启动时需要加载的文件。配置文件读取类AppConfig 也放这里。
import _ from "lodash";
import args from "yargs";
import yaml from "js-yaml";
import fs from "fs";
const argv = args.argv;
const resources = __dirname+"/../../resources";
class AppConfig {
public static instance : AppConfig ;
private data : any = null;
constructor() {
this.loadConfig();
}
public static getInstance(){
if(!this.instance){
this.instance = new AppConfig();
}
return this.instance;
}
private loadConfig(){
const env = _.get(process.env,"profiles.active") || argv.env;
if( env ){
let applicationJson = yaml.safeLoad(fs.readFileSync(resources+"/application"+(env?("-"+env):"")+".yaml","utf-8"));
this.data = _.assign({},process.env,applicationJson);
}else {
let applicationJson = yaml.safeLoad(fs.readFileSync(resources+"/application.yaml","utf-8"));
this.data = _.assign({},process.env,applicationJson);
const active = _.get(this.data,"profiles.active");
if( active ){
let applicationActiveJson = yaml.safeLoad(fs.readFileSync(resources+"/application-"+active+".yaml","utf-8"));
this.data = _.assign({},this.data,applicationActiveJson)
}
}
}
get(key:string){
return _.get(this.data,key);
}
}
export default AppConfig.getInstance()
3.设置当前配置文件
由代码可见,在环境变量没有读取到profiles.active 的时候,回去读取 application.yml文件,如果其中有对应的profiles.active变量,则会去读取相应的配置文件。
4.使用配置文件
只需要improt这个类,需要的地方,直接 调用get即可
import config from "./bootstrap/AppConfig";
config.get("service-api.proxy-target")