TypeORM v0.3.17使用npm生成迁移文件时出现dataSource缺失错误
TypeORM v0.3.17迁移报错:npm执行提示"Missing required argument: dataSource",yarn正常
环境与问题描述
- 使用TypeORM v0.3.17
- 通过yarn执行迁移相关操作一切正常,但使用npm执行时,始终报错
Missing required argument: dataSource
相关配置文件
package.json 脚本内容:
"scripts": { "start": "ts-node-dev --respawn --transpile-only --exit-child src/app.ts", "build": "tsc -p .", "typeorm": "typeorm-ts-node-commonjs", "migrate": "rm -rf build && npm run build && npm run typeorm migration:generate ./src/migrations/added-user-entity -d ./src/utils/data-source.ts", "db:push": "rm -rf build && npm run build && npm run typeorm migration:run -d ./src/utils/data-source.ts" }
data-source.ts 内容:
require("dotenv").config(); import "reflect-metadata"; import { DataSource } from "typeorm"; import config from "config"; const postgresConfig = config.get<{ host: string; port: number; username: string; password: string; database: string; }>("postgresConfig"); export const AppDataSource = new DataSource({ ...postgresConfig, type: "postgres", synchronize: false, logging: false, entities: ["src/entities/**/*.entity{.ts,.js}"], migrations: ["src/migrations/**/*{.ts,.js}"], subscribers: ["src/subscribers/**/*{.ts,.js}"], });
文件结构:
backend ... src ... migrations utils data-source.ts package.json
执行命令:
npm run migrate && npm run db:push
问题原因
npm与yarn在脚本参数传递的解析逻辑上存在差异:当在npm脚本中嵌套执行子命令时,默认会把后续参数当成当前脚本的参数,而非传递给嵌套的npm run typeorm命令,导致TypeORM无法接收到-d指定的数据源参数。
解决方案
修改package.json中的脚本,在嵌套的npm run typeorm命令后添加--分隔符,确保后续参数正确传递给typeorm命令:
"scripts": { "start": "ts-node-dev --respawn --transpile-only --exit-child src/app.ts", "build": "tsc -p .", "typeorm": "typeorm-ts-node-commonjs", "migrate": "rm -rf build && npm run build && npm run typeorm -- migration:generate ./src/migrations/added-user-entity -d ./src/utils/data-source.ts", "db:push": "rm -rf build && npm run build && npm run typeorm -- migration:run -d ./src/utils/data-source.ts" }
补充说明
--是npm脚本中用来区分当前脚本参数与子命令参数的分隔符,添加后,migration:generate、-d等参数会被正确传递给typeorm命令- 你的数据源配置文件本身没有问题,这也是yarn能正常执行的原因——yarn的参数传递逻辑不需要额外添加
--
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

