尝试运行迁移时的 Typeorm:缺少必需参数:dataSource

And*_*i R 30 node.js typeorm

ormconfig.json我正在尝试像这样运行 TypeORM 迁移

{
  "name": "default",
  "type": "postgres",
  "host": "ip-is-here",
  "port": 5432,
  "username": "name",
  "password": "12345",
  "database": "db1",
  "synchronize": false,
  "logging": false,
  "entities": ["dist/storage/**/*.js"],
  "migrations": ["dist/storage/migrations/**/*.js"],
  "cli": {
    "entitiesDir": "src/storage",
    "migrationsDir": "src/storage/migrations"
  }
}
Run Code Online (Sandbox Code Playgroud)

通过yarn typeorm migration:run
但是得到一个错误:

Missing required argument: dataSource
Run Code Online (Sandbox Code Playgroud)

我必须做什么?谢谢您的建议!

小智 46

TypeOrm在0.3.0ormconfig.json版本中删除了支持。您应该使用新语法 - 为您的数据库创建并指定选项,例如:ormconfig.ts

export const connectionSource = new DataSource({
    migrationsTableName: 'migrations',
    type: 'postgres',
    host: 'localhost',
    port: 5432,
    username: 'user',
    password: 'pass',
    database: 'somehealthchecker',
    logging: false,
    synchronize: false,
    name: 'default',
    entities: ['src/**/**.entity{.ts,.js}'],
    migrations: ['src/migrations/**/*{.ts,.js}'],
    subscribers: ['src/subscriber/**/*{.ts,.js}'],
});
Run Code Online (Sandbox Code Playgroud)

然后,运行连接后:

await connectionSource.initialize();
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式获取实体:

const myRepo = connectionSource.getRepository(SomeEntity)
Run Code Online (Sandbox Code Playgroud)

此外,您的脚本package.json应该如下所示:

"migration:generate": "./node_modules/.bin/ts-node ./node_modules/.bin/typeorm migration:generate -d src/modules/config/ormconfig.ts",
"migration:up": "./node_modules/.bin/ts-node ./node_modules/.bin/typeorm migration:run -d src/modules/config/ormconfig.ts",
"migration:down": "./node_modules/.bin/ts-node ./node_modules/.bin/typeorm migration:revert -d src/modules/config/ormconfig.ts",
Run Code Online (Sandbox Code Playgroud)

命令后,只需在控制台中给出迁移名称,无需 -n 选项

  • 这个 https://wanago.io/2022/07/25/api-nestjs-database-migrations-typeorm/ 是一个比官方文档更有用的教程 (3认同)

aru*_*n-r 9

如果您按照 typeorm设置使用 cli 设置,则使用最新的 typescript

然后下面的 package.json 脚本将起作用

"scripts": {
   "typeorm": "typeorm-ts-node-commonjs -d ./src/datasources/PostgresDatasource.ts",
}
Run Code Online (Sandbox Code Playgroud)

跑步npm run typeorm migration:generate src/migration/initaltables npm run typeorm migration:run


小智 6

请不要忘记--

如果需要将带有破折号的参数传递给npm脚本,则需要将它们添加到--后面。例如,如果需要生成,命令是这样的:

npm run typeorm migration:generate -- -n migrationNameHere
Run Code Online (Sandbox Code Playgroud)

文档在这里