为thinkjs添加环境配置

thinkjs自身是支持2套配置,一个是默认的config.js配置,一个是调试时才加载的debug.js,但在真实使用中发现这2个配置"满足不了我",比如我代码是开源放在github上的,我不可能把数据库密码啥也放上吧。。。于是我就得在主机上git pull源码后再修改重要的信息,时间长了更新的时候我就有点烦了,一直得改来改去。于是想加一个配置文件。

大概的思路是启动程序时根据配置文件来判断当前的hostname是否有相关的文件,如果有,则读取这个文件并覆盖到config.js上,这样就可以上班电脑是一套(读本地的库),家里电脑是一套(读vps的库),本是一套(读vps的库),服务器上是一套(读自身的库),然后可以把相关的重要文件添加到git忽略文件,最终达到上线无压力的目的。

建立App/Conf/environment.js文件,内容为:

/**
 * 环境配置
 * @description 根据environment.json里配置的hostname来加载不同的配置文件,并覆盖传来的参数,注意加载的配置文件是基于当前路径下的
 * @author xieliang
 * @path App/Conf/environment.js
 */
'use strict';
var hostname = require('os').hostname();
var data = require('./environment.json');
module.exports = function(config) {
 var fileName, file;
 //遍历所有的配置环境数据
 data.forEach(function(val) {
 if (!Array.isArray(val.name)) {
 val.name = [val.name];
 }
 if (val.name.indexOf(hostname) > -1) {
 fileName = val.config;
 }
 });
 if (fileName) {
 try {
 file = require('./' + fileName);
 Object.keys(file).forEach(function(val) {
 config[val] = file[val];
 });
 } catch (e) {}
 }
 return config;
}

建立App/Conf/environment.json文件,内容为:

[
 {
 "name": "xxoo-for-mm",
 "config": "xx"
 },
 {
 "name": ["ceshiji", "work"],
 "config": "xxx"
 },
 {
 "name": "online",
 "config": "online"
 }
]

json配置文件内容是一个数组,只要对象的name为当前主机的hostname则算匹配成功,支持数组方式

修改App/Conf/config.js内容:

'use strict';
var config = {
 ...
};
module.exports = require('./environment')(config);

注意:这种方式后请删除App/Conf/debug.js文件,因为全走这种方式,即使你开启APP_DEBUG也不让程序加载debug.js

其实就是程序只加载config.js,然后config.js里调用环境配置,并覆盖下加载程序。。。

最后感谢@旭的帮助,感谢@thinkjs

转自http://www.xuexb.com/html/thinkjsconfig.html

w3ctech微信

扫码关注w3ctech微信公众号

共收到8条回复

  • good,又出新文啦

    回复此楼
  • @裕波 _ 前段时间比较忙,以后常逛~

    回复此楼
  • @xuexb 热烈欢迎呀!

    回复此楼
  • 赞。但不推荐使用hostname来识别,机器名一般都不是一样的,多机部署的时候会有问题。

    个人项目可以考虑这么使用。

    回复此楼
  • @老六 其实我想的比较简单吧,比如:

    //多个测试机用一个配置
    {
     "name": ["dev-name1", "dev-name2", "dev-name3"],
     "config": "dev"
    },
    //多个线上用一个
    {
     "name": ["online-name1", "online-name2", "online-name3"],
     "config": "online"
    },
    

    当然只是解决目前我的需求~嘎嘎

    回复此楼
  • 嗯,能思考、自己找方案,很赞了!

    回复此楼
  • @前端小武 2.0里添加了env配置,可以对development, testing, production等3种环境配置对应的值

    回复此楼
  • 很赞,我也为这个烦恼过,防止每次修改,哈哈哈

    回复此楼

AltStyle によって変換されたページ (->オリジナル) /