NestJS集成Typeorm运行自定义启动脚本提示找不到实体Repository如何解决
问题根因
你遇到的实体无法识别的核心原因是两个脚本执行时的工作目录不一致,导致Typeorm配置的相对路径通配符在自定义脚本运行时无法命中实体文件。你提到的编译后实体路径后缀为.ts属于笔误,TS编译后输出的实体文件后缀实际为.js,所以你原本的通配符后缀配置是正确的。
解决方法
- 优先替换硬编码的通配符路径为基于
__dirname的动态路径,完全不受执行工作目录影响:
// Typeorm配置中替换原entities配置 entities: [__dirname + '/../**/*.entity.js']
__dirname指向当前Typeorm配置文件编译后所在的目录,上述写法会自动从配置文件目录向上递归查找所有后缀为.entity.js的文件,无论你在哪个目录执行启动脚本都能正确命中实体。
如果不想改通配符配置,统一两个脚本的执行工作目录即可:运行自定义脚本时和内置启动脚本保持一致,在项目根目录执行对应编译后的文件,比如内置脚本执行的是
node dist/main.js,自定义脚本就执行node dist/your-sync-script.js,不要进入dist目录内执行脚本。如果需要支持直接用ts-node运行TS格式的自定义脚本,可以加环境判断兼容开发/生产环境的实体路径:
entities: process.env.NODE_ENV === 'production' ? [__dirname + '/../**/*.entity.js'] : ['src/**/*.entity.ts']
验证方式
可以在Typeorm配置加载完成后加一行日志打印加载的实体列表,确认自定义脚本运行时是否正确加载到目标实体:
console.log('已加载的实体:', connectionOptions.entities)
内容的提问来源于stack exchange,提问作者Ivelin
相关产品推荐
相关产品推荐

