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

NestJS+TypeORM迁移生成与运行失败问题求助

Nx Monorepo下NestJS+TypeORM迁移命令报错解决

问题背景

接手Nx monorepo架构的NestJS项目(非JS技术栈专长),全局安装TypeORM后执行迁移生成命令:

npm run typeorm migration:generate -d ./apps/server/src/common/datasource.ts

出现以下错误:

Couldn't find tsconfig.json. tsconfig-paths will be skipped
'missing required argument: dataSource'

尝试修改路径、更换执行程序均无效,相关配置文件如下:

config.ts

import { dataSource } from './datasource';

export const config = () => {
    try {
        const _config = {
            http: {
                port: process.env.NEST_API_HTTP_PORT,
                ssl: process.env.NEST_API_HTTP_SSL,
                key: process.env.NEST_API_HTTP_KEY,
                cert: process.env.NEST_API_HTTP_CERT,
                cors: process.env.NEST_API_HTTP_CORS,
                globalPrefix: process.env.NEST_API_HTTP_GLOBAL_PREFIX,
            },

            db: dataSource,

            secrets: {
                pwdsalt: process.env.NEST_API_SECRETS_PWDSALT,
                jwt: process.env.NEST_API_SECRETS_JWT,
            },

            rules_engine: {
                url: process.env.RULES_ENGINE_URL,
                globalPrefix: process.env.RULES_ENGINE_HTTP_GLOBAL_PREFIX,
            },
        };

        return configSchema.validateSync(_config);
    } catch (err) {
        throw new Error((err as ValidationError).message);
    }
};

datasource.ts

import { DataSource } from "typeorm";

export const dataSource = new DataSource({
    type: 'postgres',
    host: process.env.DATABASE_HOST,
    port: Number(process.env.DATABASE_PORT),
    name: process.env.DATABASE_NAME,
    username: process.env.DATABASE_USER,
    password: process.env.DATABASE_PASSWORD,
    synchronize: Boolean(process.env.DATABASE_ENABLE_SYNC)
});

package.json - scripts

"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js",

解决步骤

1. 修正TypeORM脚本,指定tsconfig路径

Nx monorepo的tsconfig.json通常存放在子应用目录(如apps/server/tsconfig.json),需要在脚本中明确指定,否则ts-node无法找到配置文件:

"typeorm": "ts-node -r tsconfig-paths/register --project ./apps/server/tsconfig.json ./node_modules/typeorm/cli.js"

2. 补全dataSource配置并修正错误字段

原datasource.ts存在两处关键问题:

  • 数据库名称字段错误:TypeORM标准配置项为database,而非name
  • 缺少实体和迁移文件路径配置,TypeORM无法识别需要迁移的实体对象

修正后的datasource.ts:

import { DataSource } from "typeorm";

export const dataSource = new DataSource({
    type: 'postgres',
    host: process.env.DATABASE_HOST,
    port: Number(process.env.DATABASE_PORT),
    database: process.env.DATABASE_NAME, // 修正为正确的字段名
    username: process.env.DATABASE_USER,
    password: process.env.DATABASE_PASSWORD,
    synchronize: Boolean(process.env.DATABASE_ENABLE_SYNC),
    entities: ["./apps/server/src/**/*.entity.ts"], // 实体文件路径,根据项目结构调整
    migrations: ["./apps/server/src/migrations/**/*.ts"], // 迁移文件存放路径
});

3. 使用Nx适配的命令执行迁移(推荐)

Nx对monorepo有原生支持,在apps/server/project.json中添加TypeORM执行脚本:

"typeorm": {
  "executor": "@nrwl/node:execute-command",
  "options": {
    "command": "ts-node -r tsconfig-paths/register --project ./apps/server/tsconfig.json ./node_modules/typeorm/cli.js -d ./apps/server/src/common/datasource.ts"
  }
}

之后执行迁移生成命令:

npx nx run server:typeorm -- migration:generate ./apps/server/src/migrations/InitSchema

4. 确保环境变量正常加载

如果项目使用dotenv管理环境变量,需要在脚本中添加-r dotenv/config,确保执行命令时环境变量被正确加载:

"typeorm": "ts-node -r dotenv/config -r tsconfig-paths/register --project ./apps/server/tsconfig.json ./node_modules/typeorm/cli.js"

内容的提问来源于stack exchange,提问作者J K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:55:34