请教egg.js怎么让framework加载model、controller,或者类似framework继承一样做app继承
发布于 5 年前 作者 dxwts 4790 次浏览 来自 问答

请教各位,我刚刚用egg搭建应用,涉及针对客户做少量的定制,所以核心模块都一样,现在我想把共用的模块做成类似framework一样统一迭代,然后基于这个搭建客户的应用,因为像用户管理、内容管理这些模块所有客户都是一样的,所以用framework继承的方式我不知道怎么处理这些共用模块 QQ截图20190311194328.png

11 回复

把这些通用模块封装成 egg 插件就可以了~ 同时 app.loader 功能可以实现你的需求,统一这些之后你可以做成 egg 的上层框架提供出去。

@okoala 谢谢您的回答,看了egg的文档说插件和framework不会加载controller、router,我使用了sequelize,在framework层定义的model也是不加载的,按文档上loader部分的说明使用app.loader的方式加载model还没成功,loadToContext没报错但是调用时是未定义的,loadToApp一直报错,说model属性是只读的不能assign, 按您说的那我可能方向是对的,我再试试

这种的话,只能说继承框架,然后改loader加载一个额外目录了。。。model那边可能还要定制插件

建议参考loader的参数

loader 是可以在 app、plugin、framework 级别来挂载的。

建议是在插件里面做。

另,最近支持了通过配置来挂载 loader: https://github.com/eggjs/egg/issues/3480

@AnzerWall 好的,谢谢回复,我测试了可以

@atian25 谢谢回复,我测试可以了,之前不能在framework下挂model是字段名不能重复,app下默认把model挂到model,framework下换个名字挂载就能用了

@atian25 看了一下issues,非常有用,感谢

@dxwts 我也遇到了相同的问题,请问你最终是如何配置的? 我在framework里面配置的customLoader无法生效: exports.customLoader = { oa: { directory: ‘app/model/oa’, inject: ‘ctx’, // or app loadunit: false, // 是否加载框架和插件目录 // other loads options }, };

是egg-sequelize的问题。 目前,我是修改了 egg-sequelize/lib/loader.js # 93 行的代码,临时解决 const modelDir = path.join(app.baseDir, ‘node_modules/egg-framework-tugou/app’, config.baseDir);

@dxwts 请问最终是如何实现的呢?是通过添加customLoader嘛

回到顶部