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

执行typeorm migration:generate报错:无法打开文件及模块外import问题

问题描述

执行TypeORM迁移生成命令时出现错误:

typeorm migration:generate InitialSetup -d ormconfig.ts

错误信息:

Error: Unable to open file: "C:\_work\template-db\ormconfig.ts". Cannot use import statement outside a module
    at CommandUtils.loadDataSource (C:\_work\template-db\node_modules\typeorm\commands\CommandUtils.js:22:19)
    at async Object.handler (C:\_work\template-db\node_modules\typeorm\commands\MigrationGenerateCommand.js:68:26)

ormconfig.ts内容:

import { DataSource } from "typeorm";
import ApplicationConstants from "@config/application-constants";
import path from "path";

export const dataSource = new DataSource({
    type: "postgres",
    host: ApplicationConstants.DatabaseHost,
    port: ApplicationConstants.DatabasePort,
    username: ApplicationConstants.DatabaseUsername,
    password: ApplicationConstants.DatabasePassword,
    database: ApplicationConstants.DatabaseName,
    synchronize: false,
    logging: false,
    migrationsRun: false,
    migrations: [path.join(__dirname, "migrations/**/*{.js,.ts}")],
    entities: [path.join(__dirname, "entity/**/*{.js,.ts}")],
});

版本信息:

  • Node: 18.12.1
  • TypeORM: 0.3.10
问题原因

Node.js默认将.ts文件识别为CommonJS模块,而你的ormconfig.ts使用了ES模块的import语法,导致Node无法正确解析,抛出"Cannot use import statement outside a module"错误。

解决方法

以下几种方案任选其一:

方案1:用ts-node直接运行命令

修改命令,通过ts-node来解析TypeScript配置文件:

npx ts-node ./node_modules/typeorm/cli.js migration:generate InitialSetup -d ormconfig.ts

方案2:配置package.json为ES模块

在项目根目录的package.json中添加"type": "module":

{
  "type": "module"
}

同时确保TypeScript配置文件tsconfig.json设置对应模块选项:

{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "NodeNext"
  }
}

之后直接运行原命令即可。

方案3:将配置文件转为CommonJS格式

把ormconfig.ts中的import改为require,并导出为CommonJS格式:

const { DataSource } = require("typeorm");
const ApplicationConstants = require("@config/application-constants");
const path = require("path");

module.exports = new DataSource({
    type: "postgres",
    host: ApplicationConstants.DatabaseHost,
    port: ApplicationConstants.DatabasePort,
    username: ApplicationConstants.DatabaseUsername,
    password: ApplicationConstants.DatabasePassword,
    database: ApplicationConstants.DatabaseName,
    synchronize: false,
    logging: false,
    migrationsRun: false,
    migrations: [path.join(__dirname, "migrations/**/*{.js,.ts}")],
    entities: [path.join(__dirname, "entity/**/*{.js,.ts}")],
});

之后运行原命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:42:48