TypeORM执行migration:generate报非选项参数不足问题排查
报错根因
TypeORM 0.3.x 版本对CLI参数规则做了不兼容升级,和0.2.x版本逻辑差异较大:
- 旧版本用来指定迁移名称的
-n参数已被完全移除,迁移名称、生成路径必须作为非选项位置参数直接跟在migration:generate子命令后 - 你之前执行命令时所有参数都通过带横杠的选项形式传递,实际传入的位置参数数量为0,正好触发
Not enough non-option arguments: got 0, need at least 1报错,提示里提到的缺失参数就是迁移文件的生成路径。
修复方案
- 调整package.json里的typeorm执行脚本,yarn berry环境下避免用
$(yarn bin typeorm)的动态路径写法,直接指向cli文件即可,预配置的数据源参数保留:
"scripts": { "typeorm": "ts-node -P ./tsconfig.typeorm.json ./node_modules/typeorm/cli.js -d ./src/db/CliDataSource.ts" }
- 执行迁移生成命令时,废弃
-n=xxx的传参方式,直接把迁移文件的生成路径和名称作为位置参数传入,正确命令如下:
yarn typeorm migration:generate ./src/migrations/consent-record
路径不需要写
.ts后缀,TypeORM会自动给生成的文件添加时间戳前缀、补全文件后缀。
- 前置校验项
- 确认
tsconfig.typeorm.json中开启了esModuleInterop: true,避免ts-node执行时出现模块导入错误 - 确认CliDataSource配置里的
entities、migrations匹配路径能正确覆盖项目内的实体文件、迁移文件目录,避免后续生成时扫不到实体变更
内容的提问来源于stack exchange,提问作者Dulara Malindu
相关产品推荐
相关产品推荐

