执行npx mikro-orm migration:create报ERR_REQUIRE_ESM错误如何解决
问题根因
你遇到的两次报错本质是Node.js模块加载规范不匹配导致的:
- 第一次报错是Node默认将JS/TS文件识别为CommonJS模块,不支持
import语法 - 新增
"type": "module"后项目全局转为ESModule规范,但MikroORM CLI默认使用CommonJS的require语法加载配置文件,因此出现二次报错
解决方案
方案一:不修改package.json的type字段(和教程环境对齐,推荐)
- 首先安装ts-node开发依赖:
npm install -D ts-node - 在package.json的
scripts字段中新增MikroORM专用运行脚本,指定用ESM加载器运行:
{ "scripts": { "mikro-orm": "node --loader ts-node/esm ./node_modules/@mikro-orm/cli/cli.js" } }
- 后续所有MikroORM相关命令都通过npm脚本执行,创建迁移的命令改为:
npm run mikro-orm migration:create
如果运行仍然报错,可以在项目根目录新增.mikro-orm.config.js作为CLI的入口配置,内容如下:
require('ts-node').register(); module.exports = require('./src/mikro-orm.config.ts').default;
方案二:保留"type": "module"配置
- 在package.json中新增MikroORM专属配置段,指定配置文件路径和TS加载模式:
{ "mikro-orm": { "useTsNode": true, "configPaths": [ "./src/mikro-orm.config.ts" ] } }
- 运行迁移命令时显式指定TS加载器:
node --loader ts-node/esm ./node_modules/@mikro-orm/cli/cli.js migration:create
额外配置校验
请确认你的tsconfig.json中compilerOptions字段符合以下要求:
{ "compilerOptions": { "module": "NodeNext", "moduleResolution": "NodeNext", "esModuleInterop": true } }
如果使用ESModule规范,所有本地文件导入需要补全后缀,比如import { __prod__ } from "./constants.js"。
内容的提问来源于stack exchange,提问作者CWYOO
相关产品推荐
相关产品推荐

