TypeOrm Migration生成Entity Class报错及ESM配置问题求助
解决TypeORM Migrations在TS5.x项目中的配置错误
问题根源
- TS装饰器错误(TS1238/TS1240):TypeScript 5.x启用了新的装饰器标准,旧版TypeORM(0.2.x)不兼容该标准,同时ts-node未适配新语法。
- ESM模块错误:未将项目配置为ES模块,导致Node.js无法识别
import语句。
解决步骤
1. 升级TypeORM到兼容TS5的版本
确保使用TypeORM 0.3.x系列(全面支持TS5),执行安装命令:
npm install typeorm@latest
2. 调整tsconfig.json配置
更新tsconfig.json,适配装饰器和ES模块规则:
{ "compilerOptions": { "target": "ES2020", "module": "NodeNext", "moduleResolution": "NodeNext", "emitDecoratorMetadata": true, "experimentalDecorators": true, "strict": true, "strictPropertyInitialization": false, "outDir": "./dist", "esModuleInterop": true }, "include": ["src/**/*", "path-to-config/**/*", "path-to-migrations/**/*"], "exclude": ["node_modules"] }
3. 标记项目为ES模块
在package.json顶部添加"type": "module",告知Node.js以ES模块模式运行:
{ "type": "module", // 原有配置... }
4. 修复TypeORM CLI脚本
更新package.json中的命令,使用ESM专用CLI工具并修正路径(注意避免拼写错误):
{ "scripts": { "typeorm": "typeorm-ts-node-esm", "migration:create": "npm run typeorm migration:create ./path-to-migrations/$npm_config_name", "migration:generate": "npm run typeorm -d ./path-to-config/typeorm.ts migration:generate ./path-to-migrations/$npm_config_name", "migration:run": "npm run typeorm -d ./path-to-config/typeorm.ts migration:run", "migration:revert": "npm run typeorm -d ./path-to-config/typeorm.ts migration:revert" } }
5. 修正TypeORM配置文件
确保typeorm.ts使用ESM语法(import/export):
import { DataSource } from "typeorm"; import { YourEntity } from "./path-to-entities/YourEntity"; export default new DataSource({ type: "postgres", // 替换为你的数据库类型 host: "localhost", port: 5432, username: "your-username", password: "your-password", database: "your-db-name", entities: [YourEntity], migrations: ["./path-to-migrations/**/*.ts"], synchronize: false, // 迁移模式下必须禁用自动同步 logging: false, });
验证执行
测试迁移命令:
# 创建空迁移文件 npm run migration:create --name=InitialSetup # 根据实体变化生成迁移 npm run migration:generate --name=AddUserTable # 执行迁移 npm run migration:run
内容的提问来源于stack exchange,提问作者meursault
相关产品推荐
相关产品推荐

