Yarn Monorepo中Nodemon无法识别ORM包TS导出的配置问题
解决Yarn Monorepo中nodemon加载依赖包TS源码的问题
核心原因
你的api包通过nodemon+ts-node运行TS代码时,默认会读取orm包package.json的main字段去加载编译后的dist/index.js,但开发场景下要么orm包还未编译,要么TS语法(比如枚举、类型导出)编译为JS后无法被TS编译器正确识别,从而触发TS2305导出成员不存在的错误。
解决方案
不需要修改orm包的main字段,通过以下配置让nodemon自动加载依赖包的TS源码:
方案1:配置TypeScript路径映射 + tsconfig-paths
- 在api包的
tsconfig.json中添加路径映射,将orm包指向其源码目录:
{ "compilerOptions": { "baseUrl": ".", "paths": { "@your-project/orm": ["../orm/src"] // 替换为你的orm包实际名称和路径 } }, "include": ["src/**/*"] }
- 在api包的
nodemon.json中配置ts-node加载路径映射:
{ "watch": ["src", "../orm/src"], // 可选:监听orm源码变化自动重启 "ext": "ts", "exec": "ts-node --require tsconfig-paths/register src/index.ts" }
- 确保orm包的
package.json中添加types字段指向源码类型:
{ "main": "dist/index.js", "types": "src/index.ts", // 开发时用源码类型,生产环境可改为dist/index.d.ts "scripts": { "build": "tsc" } }
方案2:使用TypeScript项目引用(适合大型monorepo)
- 在orm包的
tsconfig.json中开启项目组合模式:
{ "compilerOptions": { "composite": true, "declaration": true, "outDir": "./dist" }, "include": ["src/**/*"] }
- 在api包的
tsconfig.json中引用orm包:
{ "compilerOptions": { "baseUrl": "." }, "references": [{"path": "../orm"}], "include": ["src/**/*"] }
- 修改api包的nodemon执行命令:
{ "watch": ["src", "../orm/src"], "ext": "ts", "exec": "ts-node --transpile-only src/index.ts" }
项目引用会让TS自动处理依赖包的源码解析,无需额外路径映射。
方案3:直接在package.json脚本中配置(快速临时方案)
如果不想修改tsconfig,可在api包的package.json中修改dev脚本:
"scripts": { "dev": "nodemon --exec 'ts-node -r tsconfig-paths/register src/index.ts' --ext ts" }
配合方案1中的tsconfig路径映射即可生效。
注意事项
- 确保api包的
package.json中已正确依赖orm包(如"@your-project/orm": "*"),Yarn Workspaces会自动关联本地包。 - 开发时无需提前编译orm包,ts-node会实时编译TS源码。
内容的提问来源于stack exchange,提问作者Drazen Bebic
相关产品推荐
相关产品推荐

