
后端【免费下载链接】mikro-ormTypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases.项目地址https://gitcode.com/gh_mirrors/mi/mikro-orm点击查看免费下载MikroORM 的 CLI如schema:update、migration:create、entity-generator等命令在启动时需要import()你的 TypeScript 文件——既包括 ORM 配置文件也包括从配置中发现并加载的实体。Node.js 原生虽然已能运行 TypeScript但只做「剥离类型」处理遇到 enum、装饰器这类需要语义信息的语法仍会解析失败。而装饰器定义实体恰恰是 MikroORM 最常见的用法因此 CLI 在加载配置前会先注册一个受支持的 TypeScript loader。本篇指南以 v7.2 版本文档docs/versioned_docs/version-7.2/typescript-loaders.md为主线结合 packages/cli 的源码实现完整讲解 loader 的检测逻辑、支持的 loader 清单、选型与配置方式以及 Nub 等特殊 loader 的约束帮助你排查「CLI 读不到 TS 配置 / 装饰器实体解析失败」一类问题。为什么 CLI 需要 TypeScript LoaderMikroORM CLI 的工作流大致是读取配置 → 发现实体 → 基于元数据执行命令。整个过程发生在 Node 进程内因此 CLI 必须先能把.ts文件真正「跑起来」。Node.js 22.6 及后续版本内置了对 TypeScript 的实验性支持但它只负责剥离类型注解type stripping不会做完整的类型检查与转换。对于普通接口、类型别名等纯类型语法没问题可一旦文件中出现enum 声明Node 原生剥离无法将enum转换为其运行时可用的对象形态装饰器Entity()、Property()这类 MikroORM 核心语法依赖experimentalDecorators编译产物剥离型执行直接失败。装饰器定义实体是 MikroORM 的主流用法所以 CLI 必须借助第三方 loader。若任何 loader 都不可用CLI 只能回退到编译后的 JavaScript 配置如dist/mikro-orm.config.js并忽略 TypeScript 配置。从源码看这一注册动作发生在 CLI 解析命令之前CLIConfigurator.ts 中只要settings.preferTs ! false就会调用CLIHelper.registerTypeScriptSupport()注册 loader注册失败时会把MIKRO_ORM_CLI_PREFER_TS置为0从而在后续配置路径搜索中跳过 TS 文件。自动检测TypeScript 支持是如何被发现的preferTs未显式配置时CLI 通过Utils.detectTypeScriptSupport()自动判断当前环境是否「在跑 TypeScript」。其实现位于 packages/core/src/utils/Utils.ts检测条件包括检测信号说明process.argv[0]以ts-node结尾直接通过 ts-node 运行MIKRO_ORM_CLI_ALWAYS_ALLOW_TS环境变量强制允许 TS或已被registerTypeScriptSupport()内部置为1TS_JEST环境变量检测到 ts-jestVITEST环境变量检测到 Vitestprocess.versions.bun运行在 Bun 下Bun 原生支持 TS命令行参数含.ts/.mts/.cts/.tsx文件正在执行 TS 入口process.execArgv中包含ts-node、swc-node/register、node_modules/tsx/、oxc-node/core、nubjs/loader检测到已注入的 TS loader也就是说测试框架、运行器、已注册的 loader、入口文件扩展名都会影响检测结果这也是文档所说的「基于配置文件扩展名、process.execArgv中的 TS loader、或所用测试运行器」的完整来源。检测结果直接影响配置搜索路径CLIHelper.getConfigPaths()CLIHelper.ts在检测到 TS 支持时会额外把./src/mikro-orm.config.ts与./mikro-orm.config.ts加入候选同时根据dist/build/src目录的存在情况依次尝试./dist|build|src/mikro-orm.config.js与./mikro-orm.config.js。非 TS 后缀的.ts配置路径会被过滤掉这正是「找不到 loader 就回退到编译后 JS 配置」的实现细节。手动强制preferTs检测是启发式的偶尔需要强制干预。在package.json中声明mikro-orm配置块mikro-orm: { preferTs: true }等价的环境变量写法export MIKRO_ORM_CLI_PREFER_TStrue从CLIHelper.getSettings()CLIHelper.ts可以看出环境变量的优先级高于package.json设置另外当MIKRO_ORM_CLI_CONFIG指向的配置文件以.ts结尾时preferTs会被隐式置为 true。mikro-orm debug命令会如实输出该标志的实际取值见 DebugCommand.ts当它被显式设置为true时还会提示「在运行编译后代码时应将其设为false」。支持的 Loader 清单v7.2 文档列出的 loader 按自动尝试顺序如下Loader提供方是否支持元数据反射说明oxcoxc-node/core✅基于 Rust 的 OXC 编译器速度极快swcswc-node/register✅基于 SWC注册 ESM/CJS 两条路径tsxtsx❌常用的一体化 TS 运行器jitijiti❌轻量动态 import 编译器tsimptsimp❌快速 TS 导入器nubnubjs/loader✅v7.2 起新增注意其特殊约束见下文这里的「元数据反射」指 loader 是否尊重emitDecoratorMetadata编译选项——该选项是ReflectMetadataProvider与 legacy 装饰器配合工作的前提。其他元数据提供者如TsMorphMetadataProvider、ReflectionMetadataProvider等不依赖反射元数据因此对 loader 没有此要求。这也是oxc、swc、nub三个 loader 在文档中被单独标注「supports metadata reflection」的原因。对应源码映射位于registerTypeScriptSupport的loaders表CLIHelper.ts每种 loader 都区分了 ESM 与 CJS 两个注册入口例如 swc 在 ESM 下用swc-node/register/esm-register、CJS 下用swc-node/registertsx 则通过tsx.register({ tsconfig: configPath })回调注入。jiti与tsimp还会设置dynamicImportProvider以兼容 CJS 项目中的动态导入。选型auto 与显式指定默认值为autoCLI 按照上表顺序依次尝试Utils.tryImport()取第一个在当前项目依赖中存在的 loader。若某 loader 已安装但加载抛错auto 模式不会立刻失败而是把错误记录下来继续尝试下一个如果最终一个都没装上会输出一条警告并返回false此时 CLI 回退到 JS 配置。警告文本还附带了安装提示用oxc需安装oxc-node/core用swc需同时安装swc-node/register与swc/coreCLIHelper.ts。显式指定 loader 用package.json的tsLoader设置mikro-orm: { tsLoader: jiti }或环境变量export MIKRO_ORM_CLI_TS_LOADERjiti关键差异显式指定时没有任何回退机制。若指定 loader 未安装或加载失败CLI 会直接抛出Failed to load TypeScript loader ...错误而不是尝试下一个CLIHelper.ts。因此请确保所选 loader 已加入项目devDependencies。验证当前生效的 loader 有两种方式运行npx mikro-orm debug输出中的TypeScript support enabled (loader)即注册成功的 loaderDebugCommand.ts在auto模式下registerTypeScriptSupport成功后还会把选中的 loader 名写回MIKRO_ORM_CLI_TS_LOADER环境变量供后续逻辑查询。tsconfig.json 的指向oxc、swc、tsx、jiti、tsimp这些 loader 都依赖你的tsconfig.json来决定编译选项装饰器开关、emitDecoratorMetadata等默认指向当前工作目录下的tsconfig.json。如需指向其他文件用tsConfigPath设置mikro-orm: { tsConfigPath: ./tsconfig.cli.json }或环境变量export MIKRO_ORM_CLI_TS_CONFIG_PATH./tsconfig.cli.json注意cli 的tsConfigPath是 CLI 层概念与discovery.tsConfigPath已废弃见 upgrading-v3-to-v4.md 中的说明不是一回事。源码中该路径还会通过SWC_NODE_PROJECT、TSIMP_PROJECT环境变量传递给对应 loaderCLIHelper.ts。Nub特殊约束需注意nubnubjs/loader在 v7.2 加入行为与其余 loader 有显著差异tsconfig 自主解析它总是自行查找「每个被导入文件最近的tsconfig.json」无法被指向自定义路径。因此显式选择tsLoader: nub且同时配置了tsConfigPath时CLI 直接抛错auto模式下只要配置了自定义 tsconfig 路径自动选型会跳过 nub源码见 CLIHelper.ts 与 L380-L382 的continue逻辑。仅支持 legacy 装饰器需要tsconfig.json中开启experimentalDecorators: true使用 ES 装饰器标准装饰器语法的文件会被 nub 拒绝。若你的实体使用 ES 装饰器请换用其他 loader。显式使用 nub 的配置mikro-orm: { tsLoader: nub }提前编译另一种路径以上 loader 全部面向「直接运行 TypeScript」的场景。如果你的项目是用tsc、Babel 或 SWC预先编译成 JS 后再交给 CLI那么不需要也不建议在 CLI 中启用这些 loader而是要为编译流程配置正确的装饰器选项——详见 usage-with-transpilers.md其中涵盖experimentalDecorators、emitDecoratorMetadata、useDefineForClassFields等与 MikroORM 强相关的编译选项。此时应把preferTs设为false让 CLI 直接使用entities数组与编译产物。配置优先级速查综合文档与 CLIHelper.ts 的getSettings()实现三个 CLI 专属设置的优先级从高到低均为环境变量 package.json 的mikro-orm配置块 默认值设置package.json 键环境变量默认值是否优先 TSpreferTsMIKRO_ORM_CLI_PREFER_TS自动检测选择 loadertsLoaderMIKRO_ORM_CLI_TS_LOADERautotsconfig 路径tsConfigPathMIKRO_ORM_CLI_TS_CONFIG_PATH./tsconfig.json其中preferTs与tsLoader为布尔/枚举值true/t/1视为真环境变量值会直接覆盖配置文件中的值。故障排查建议遇到「CLI 找不到 TS 配置」或「装饰器实体加载报错」时按此顺序排查运行npx mikro-orm debug确认TypeScript support enabled (loader)一行是否存在、用的是哪个 loader确认项目依赖中确实安装了对应 loaderauto模式下缺装只会降级到 JS 配置并打警告容易误判若使用ReflectMetadataProvider legacy 装饰器确认所选 loader 支持元数据反射oxc/swc/nub且tsconfig.json开启了experimentalDecorators与emitDecoratorMetadata检查是否误配了tsLoader与tsConfigPath的组合nub 与自定义 tsconfig 互斥确认package.json中mikro-orm配置块与相关环境变量没有互相冲突环境变量优先。相关源码与文档可继续深入CLIHelper.tsloader 注册与设置读取、Utils.tsTS 支持检测、DebugCommand.tsdebug 输出、configuration.mdCLI 环境变量总表。赞分享后端【免费下载链接】mikro-ormTypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases.项目地址https://gitcode.com/gh_mirrors/mi/mikro-orm点击查看免费下载相关推荐MikroORM CLI 的 TypeScript Loader 机制自动探测、手动配置与实体元数据加载全解析MikroORM CLI 的 TypeScript Loader 机制自动探测、手动配置与实体元数据加载全解析 MikroORM 的 CLI 工具需要能够 i后端如何快速配置Alacritty主题面向用户的完整指南如何快速配置Alacritty主题面向用户的完整指南 厌倦了单调的终端配色想要让代码编辑体验更加愉悦吗Alacritty主题集合为你提供了终极解决方案这Nix Store 类型与 Store URL 完全指南从 nix help-stores 到 auto 自动选择机制Nix Store 类型与 Store URL 完全指南从 nix help stores 到 auto 自动选择机制 Nix 将包存储的后端抽象为统一的概念包管理器开发工具CLI构建工具上一篇ngx-quill数据迁移指南从HTML格式平滑切换到Delta格式下一篇向Infracost贡献代码完全指南30分钟为新的AWS云资源添加成本估算支持创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考