首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何发布或分发使用mikro-orm的应用程序?

如何发布或分发使用mikro-orm的应用程序?
EN

Stack Overflow用户
提问于 2019-04-05 03:07:46
回答 1查看 382关注 0票数 1

在配置中,我必须指定定义实体的.js和.ts文件的路径:

代码语言:javascript
复制
MikroORM.init({
    ...
    entitiesDirs: ["build/entities"],
    entitiesDirsTs: ["src/entities"],
});

所以,当我去发布或分发应用程序的时候。我也需要分发打字代码吗?或者我只需要分发生成的缓存?或者我需要同时分发这两个版本?或者..。一个也没有?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-05 03:28:09

从MikroORM v2.2开始

现在你可以使用默认的元数据提供程序,只有当你的装饰器中没有提供entitytype选项时,它才需要实体源文件(你可以使用entity回调来使用实体类的引用,而不是使用type中的字符串名,通过集成开发环境进行重构的句柄,比如webstorm)。

原始答案:

你也应该发布typescript代码,让缓存在服务器上重新生成-缓存无论如何都会重建,因为它会检查到缓存实体的绝对路径是否无效。

如果您不想发布typescript代码,您可以实现自己的缓存适配器或元数据提供程序来解决此问题。

这就是实现定制元数据提供程序的方法,当缺少类型选项时,该提供程序只是抛出错误:

代码语言:javascript
复制
import { MetadataProvider, Utils } from 'mikro-orm';
import { EntityMetadata } from 'mikro-orm/dist/decorators';

export class SimpleMetadataProvider extends MetadataProvider {

  async loadEntityMetadata(meta: EntityMetadata, name: string): Promise<void> {
    // init types and column names
    Object.values(meta.properties).forEach(prop => {
      if (prop.entity) {
        prop.type = Utils.className(prop.entity());
      } else if (!prop.type) {
        throw new Error(`type is missing for ${meta.name}.${prop.name}`)
      }
    });
  }

}

然后在初始化时提供这个类:

代码语言:javascript
复制
const orm = await MikroORM.init({
  // ...
  metadataProvider: SimpleMetadataProvider,
});

type的值应该是JS类型,如string/number/Date...您可以观察您的缓存元数据,以确定应该有哪些值。

还要记住,如果没有TS元数据提供程序,您还需要在@ManyToOne装饰器中指定实体类型(通过entity回调,或者通过type作为字符串)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55523319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档