[Support] 自定义组件疑问 #3565
-
Describe the problem(描述问题)想进行模块化开发, 比如主应用是系统管理,现有一个 CMS 模块想以组件的方式开发,然后在主应用中引用。使用 mikro-orm,实体应该定义在 CMS 组件中,在主应用中如何使用? Midway Versions(Midway 版本)midway@latest |
Beta Was this translation helpful? Give feedback.
Replies: 6 comments 28 replies
-
可以看看这个, https://www.midwayjs.org/docs/component_development |
Beta Was this translation helpful? Give feedback.
-
不是把entity暴露出去,组件是完全隔离的。有自己的 entity 。主应用导入组件后正常是直接能访问组件中 Controller 操作实体业务的 。现在的问题是在组件中进行entity操作,主应用引入组件后,组件中的实体丢失了。 |
Beta Was this translation helpful? Give feedback.
-
这样的写法就是主应用与组件耦合太多。 本身所有业务都是在组件中完成 ,主应用引入组件后应该自动包含了组件的业务。不需要再配置数据库实体。 |
Beta Was this translation helpful? Give feedback.
-
数据源可以直接注入的,并不需要从组件导出,导出 entity 即可。如果真有数据源分离的场景,比如主应用就是要额外添加一些 entity 进去,那么组件应该包装成另外的样子。 比如: 如果你的组件 m1 export default {
m1: {
entities: [xxxx]
}
} 在初始化的地方,组件自己添加到数据源中 export class Main {
onReady() {
const config = configService.getConfiguration()
const customEntities = configService.getConfiguration('m1.entities')
config.typeorm.datasources['default']['entities'].push(...customEntities);
}
} 这样能保证组件自己拥有数据源,也具有隔离性。 |
Beta Was this translation helpful? Give feedback.
-
很奇怪,这种方式启动时能看到实体已经加载,但是访问时还是提示找不到 User 实体 |
Beta Was this translation helpful? Give feedback.
@midwayjs/[email protected] 拉到这个版本,你的 demo 也已经加到测试里了。https://github.com/midwayjs/midway/tree/main/packages/mikro/test/fixtures/multi-enitymanager/src