NodeJS 使用npm生成迁移时的Typeorm-缺少必需的参数:dataSource

nkhmeac6  于 2023-10-17  发布在  Node.js
关注(0)|答案(1)|浏览(175)

我一直在为使用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

我是不是漏掉了什么

jq6vz3qz

jq6vz3qz1#

我在这个版本中遇到了同样的问题,我想向其他人澄清这个问题。
关键是TypeScript在这个版本中有一些变化。首先,你必须传递数据源,这是一个已经是JSON文件的旧ormconfig文件,但在这个版本中,它必须是这样的.ts文件:

import { DataSource } from "typeorm";

const connectionSource = new DataSource({
    type: "mysql",
    host: "localhost",
    port: 3306,
    username: "your-db-username",
    password: "your-db-password",
    database: "your-db-name",
    synchronize: false,
    logging: false,
    entities: ["src/entity/**/*{.js,.ts}"],
    migrations: ["src/migration/**/*{.js,.ts}"],
    subscribers: ["src/subscriber/**/*{.js,.ts}"],
});

export default connectionSource;

现在你必须像这样传递密码:

-d ./ormconfig.ts

因此,package.json文件中的scripts部分如下所示:

"typeorm": "typeorm-ts-node-commonjs -d ./ormconfig.ts",
"migration:create": "typeorm-ts-node-commonjs migration:create ./src/migration/YOUR-MIGRATION-NAME",
"migration:generate": "npm run typeorm migration:generate ./src/migration/YOUR-MIGRATION-NAME",
"migration:run": "npm run typeorm migration:run",
"migration:revert": "npm run typeorm migration:revert"

只需替换您的任意名称,而不是上述代码中的YOUR-MIGRATION-NAME。

注意,这个版本显然有一个bug,在migration:create和migration:generate scripts之后,你必须像这样提到你的迁移文件名的路径:

./src/migration/YOUR-MIGRATION-NAME

否则,TypeScript将在根项目中生成迁移文件,并且无法运行迁移:按预期运行。
希望这对你有帮助。

相关问题