Начиная с MikroORM v2.2
Теперь вы можете работать с провайдером метаданных по умолчанию, для него требуются исходные файлы сущностей, только если вы не предоставляете опции entity
или type
в своих декораторах (вы можетеиспользуйте entity
callback для использования ссылки на класс сущности вместо использования имени строки в type
, дескриптор для рефакторинга через IDE (например, веб-шторм).
Исходный ответ:
Вам следует также отправить код машинописи и позволить кэшу восстановиться на сервере - кеш будет перестроен в любом случае, так как он проверяет абсолютный путь к кешируемой сущности на предмет недействительности.
Вы можете реализовать свой собственный адаптер кеша или провайдера метаданных, чтобы обойти это, если не хотите отправлять код машинописи.
Вот как можно реализовать пользовательский поставщик метаданных, который просто выдает ошибку, если отсутствует опция типа:
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}`)
}
});
}
}
Затем укажите этот класс при инициализации:
const orm = await MikroORM.init({
// ...
metadataProvider: SimpleMetadataProvider,
});
Значение type
должно соответствовать типам JS, например string/number/Date
... Вы можете наблюдать ваши кэшированные метаданные, чтобы убедиться, какие значения должны быть там.
Также имейте в виду, что без поставщика метаданных TS,вам также нужно будет указать тип сущности в декораторе @ManyToOne (либо через entity
callback, либо в виде строки через type
).