TypeORM执行migration:generate报错Cannot use import statement outside a module
报错根因
该报错是因为直接通过npx typeorm运行命令时,Node.js 会以 CommonJS 规范直接加载ormconfig.ts文件,无法识别 TS 语法和 ES 模块的import语法,未经过转译处理导致的。
解决方案
方案1:使用ts-node执行TypeORM CLI(最通用)
首先确保项目已安装ts-node开发依赖,未安装可执行npm i ts-node -D完成安装。
将原生成命令替换为:npx ts-node ./node_modules/typeorm/cli.js migration:generate -n Mock如果你的项目是 ESM 规范(package.json 中配置了
"type": "module"),请使用适配ESM的命令:npx ts-node-esm ./node_modules/typeorm/cli.js migration:generate -n Mock你也可以把命令配置到 package.json 的 scripts 字段中,简化后续使用:
{ "scripts": { "migration:generate": "ts-node ./node_modules/typeorm/cli.js migration:generate -n" } }后续生成迁移直接执行
npm run migration:generate Mock即可。方案2:适配高版本TypeORM命令
如果你使用的是 TypeORM 0.3.x 及以上版本,CLI 命令格式有调整,需要显式指定迁移文件的生成路径,命令示例:npx ts-node ./node_modules/typeorm/cli.js migration:generate src/migrations/Mock方案3:更换配置文件格式
如果不想每次执行命令都携带ts-node参数,你可以把ormconfig.ts替换为 Node.js 可直接识别的 CommonJS 规范ormconfig.js,或者 JSON 格式的ormconfig.json。使用JSON配置时,实体路径需要修改为通配符字符串格式,示例:{ "type": "postgres", "host": "localhost", "port": 5432, "username": "xxxxxx", "password": "yyyyyy", "database": "typeorm", "entities": ["src/entities/**/*.ts"], "synchronize": false }
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

