You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 13:15:56