[eggjs/egg]在一个普通文件中,如何不通过app.config去获取应用的最终配置?

2024-03-29 953 views
6

代码如下: ${baseDir}/config/config.default.js

const path = require('path');
module.exports = appInfo => {
   return {
       a: path.join(appInfo.baseDir, 'a'),
   }
}

${baseDir}/config/config.prod.js

const path = require('path');
module.exports = appInfo => {
   return {
       b: path.join(appInfo.baseDir, 'b'),
   }
}

如何在一个普通文件中,无法变量app的情况下,去获取应用最终配置?

回答

6

你引用这个文件的地方肯定是有上下文的,把配置传入就是了。

7

你的意思是用loader去加载这个普通文件吗?然后访问到app这样子

9

嗯,因为你这个文件肯定要在 egg 里面挂载使用的

3

不一定啊,比如你写个 util 文件,你用的时候肯定在某个 egg 上下文中用,比如在 service 里用,你就是 require/import 进来,然后再用,用的时候你需要哪些上下文数据你就传入呗。

4

感谢大佬们,已经解决了,自己require各个配置文件,传入app信息,然后将default配置和env配置使用extend2模块deep copy出来

9

为什么不用我说的方式呢。。。 仔细看下吧。

你那方式有隐患的,自行合并配置并不好。

8

ok, 我到时修改一下

5

……想象不到为什么要这样做,又是一埋坑神操

5

不好意思,刚在公司推nodejs落地,对egg不大熟悉。
@atian25 比如我创建了一个普通的util文件,它导出一个方法,方法里面需要用到app.config配置,这是挺常见的一个场景吧。我不想在调用这个方法时才把app传入,也不想直接把这个util模块挂载到app上,所以就探索有没有办法在util模块里面直接require配置文件来使用。其实可以考虑把app对象注入到全局,这样子项目到处都能直接访问到配置了。

3

util 我理解应该是通用的、函数式的,与环境无关,配置应该作为参数传入;你要是需要结合业务配置或上下文,可以考虑做成 Common Service。