TypeORM 无法使用带有配置的 cli

Pla*_*fYT 8 node.js typescript typeorm discord.js typeorm-activerecord

我有我的(打字稿)项目(如果这很重要,它是一个不和谐的机器人),其中包含一个“ormconfig.json”文件。这个文件包含了我对TypeORM的配置,如下:

{
    "type": "mysql",
    "host": "<IP of my server>",
    "port": 3306,
    "username": "<MySQL User>",
    "password": "<MySQL Password>",
    "database": "<existing MySQL database>",
    "synchronize": true,
    "logging": false,
    "entities": [
        "src/entities/*.ts"
    ],
    "migrations": [
        "src/migration/*.ts"
    ],
    "subscribers": [
        "src/subscriber/*.ts"
    ],
    "cli": {
        "entitiesDir": "src/entities/",
        "migrationsDir": "src/migration/",
        "subscribersDir": "src/subscriber/"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我在实际服务器上运行任何内容,配置通常会起作用。实体已正确加载,我可以按预期使用它们。现在我对实体进行了一些更改,这意味着我必须进行迁移。尝试生成迁移导致实际问题出现。

我尝试运行以下命令:

npm run typeorm migration:show -- -d .\ormconfig.json
Run Code Online (Sandbox Code Playgroud)

我期望它加载配置,连接到服务器,检查数据库并给我输出。然而,当它加载时,它只是抛出一个错误,说

Given data source file must contain export of a DataSource instance

我也尝试通过 javascript 执行此操作,但是当我导出“DataSource”实例时,我收到类似的错误:

Invalid file path given: "C:\temp\Bot\src\database.ts". File must contain a TypeScript / JavaScript code and export a DataSource instance.

下面还有我的 package.json 文件,用于项目的依赖项。

{
  "name": "Bot",
  "version": "1.1.1",
  "description": "desc",
  "main": "index.ts",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "serve": "npx ts-node src/index.ts",
    "start": "npx ts-node src/index.ts",
    "typeorm": "npx --require ts-node/register ./node_modules/typeorm/cli.js",
  },
  "author": "PlayWolfYT",
  "license": "ISC",
  "dependencies": {
    "@discordjs/builders": "^0.12.0",
    "@discordjs/rest": "^0.3.0",
    "@types/nodemailer": "^6.4.4",
    "dayjs": "^1.10.8",
    "discord-api-types": "^0.27.0",
    "discord.js": "^13.6.0",
    "mysql2": "^2.3.3",
    "nodemailer": "^6.7.2",
    "nodemon": "2.0.15",
    "reflect-metadata": "^0.1.13",
    "ts-node": "^10.5.0",
    "typeorm": "^0.3.3",
    "typescript": "^4.6.2"
  },
  "devDependencies": {
    "@types/node": "^17.0.21",
    "@discordjs/builders": "^0.12.0",
    "@discordjs/rest": "^0.3.0"
  }
}
Run Code Online (Sandbox Code Playgroud)

Lui*_* M. 7

因此,您正在使用 Typeorm 的较新版本之一,其中他们放弃了对ormconfig.{json,xml}文件的支持。您必须{ts,js}使用数据源将数据库连接选项放入文件中并将其导出。

解决您的问题的两个选项:

  • 将您的打字机降级为0.2.45npm i typeorm@0.2.45
  • 按照新文档更新您的代码:Typeorm 文档

如果需要,我可以通过编辑此答案来帮助您进行设置,只需在下面评论即可。


Edo*_*nie 5

创建一个名为“data-source.ts”的文件

import { DataSource } from 'typeorm';

export const AppDataSource = new DataSource({
  type: 'mysql',
  host: 'localhost',
  port: 3306,
  username: 'user',
  password: 'pass',
  database: 'db_name',
  entities: [],
  migrations: [],
  subscribers: [],
});
Run Code Online (Sandbox Code Playgroud)

然后运行

npm run typeorm 迁移:show -- -d "path/data-source.ts"