Mikro ORM执行migration:create命令时提示配置文件未找到
执行
npx mikro-orm migration:create时出现配置文件找不到错误 问题描述
跟随Ben Awad的全栈教程(对应教程约30分钟内容)执行npx mikro-orm migration:create命令时,抛出以下错误:
Error: MikroORM config file not found in ['./dist/mikro-orm.config.js', './mikro-orm.config.js'] at Function.getConfiguration (/Users/username/lireddit-server/node_modules/@mikro-orm/core/utils/ConfigurationLoader.js:44:15) at async Function.getORM (/Users/username/lireddit-server/node_modules/@mikro-orm/cli/CLIHelper.js:22:25) at async Function.handleMigrationCommand (/Users/username/lireddit-server/node_modules/@mikro-orm/cli/commands/MigrationCommandFactory.js:68:21)
推测错误原因是命令在查找不存在的./mikro-orm.config.js文件,而实际存在的是./src/mikro-orm.config.ts文件。
相关文件内容
mikro-orm.config.ts
import { Options } from "@mikro-orm/core"; import path from "path"; import { __prod__ } from "./constants"; import { Post } from "./entities/Post"; const config: Options = { migrations: { path: path.join(__dirname, "./migrations"), glob: "!(*.d).{js,ts}", }, entities: [Post], dbName: "lireddit", user: "postgres", password: "postgres", type: "postgresql", debug: !__prod__, }; export default config;
注:教程中使用pattern配置迁移文件匹配规则,此处改用glob因为pattern已被弃用。
package.json
{ "name": "lireddit-server", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "watch": "tsc -w", "dev": "nodemon dist/index.js", "start": "node dist/index.js", "start2": "ts-node src/index.ts", "dev2": "nodemon --exec ts-node src/index.ts" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "@types/node": "^18.8.4", "nodemon": "^2.0.20", "typescript": "^4.8.4" }, "dependencies": { "@mikro-orm/cli": "^5.4.2", "@mikro-orm/core": "^5.4.2", "@mikro-orm/migrations": "^5.4.2", "@mikro-orm/postgresql": "^5.4.2", "pg": "^8.8.0" }, "mikro-orm": { "useTsNode": true, "configPaths": [ "./src/mikro-orm.config.ts", "./dist/mikro-orm.config.js" ] } }
index.ts
import { MikroORM } from "@mikro-orm/core"; import { profileEnd } from "console"; import { userInfo } from "os"; import { __prod__ } from "./constants"; import { Post } from "./entities/Post"; import microConfig from "./mikro-orm.config"; const main = async () => { const orm = await MikroORM.init(microConfig); const post = orm.em.create(Post, { title: "first post" }); await orm.em.persistAndFlush(post); console.log("--------sql2---------"); await orm.em.nativeInsert(Post, { title: "my first post" }); }; main().catch((err) => { console.log(err); }); console.log("hello world");
Post实体文件(src/entities/Post.ts)
import { Entity, PrimaryKey, Property } from "@mikro-orm/core"; @Entity() export class Post { @PrimaryKey() id!: number; @Property() createdAt? = new Date(); @Property({ onUpdate: () => new Date() }) updatedAt? = new Date(); @Property() title!: string; }
解决方案
- 安装
ts-node:当前package.json的devDependencies中缺少ts-node,执行npm install -D ts-node完成安装,MikroORM CLI需要它来解析TypeScript配置文件。 - 确认执行路径:必须在项目根目录下执行
npx mikro-orm migration:create,否则CLI无法定位配置文件。 - 验证配置路径:package.json中
mikro-orm.configPaths已正确配置./src/mikro-orm.config.ts,安装ts-node后CLI即可正常加载该TypeScript配置文件。 - 可选操作:先执行
npm run watch编译TypeScript文件,确保dist/mikro-orm.config.js存在,CLI也可加载编译后的JS配置文件。
内容的提问来源于stack exchange,提问作者Travis
相关产品推荐
相关产品推荐

