使用Bun Workspaces Monorepo时TypeScript导入错误与类型不兼容问题
Bun Workspaces Monorepo 类型依赖冲突问题及不推荐理由
我用Bun Workspaces搭建了Monorepo项目,目录结构分为packages/*和apps/*,从packages/drizzle-client导入包时触发类型错误,核心原因是node_modules内的类型文件导入路径不匹配,具体报错如下:
Type 'NodePgDatabase<Record<string, never>> & { $client: Pool; }' is not assignable to type 'NodePgDatabase<Record<string, never>>'. The types of '_.schema' are incompatible between these types. Type 'import("/home/adityasharma/projects/synapse/node_modules/drizzle-orm/relations").ExtractTablesWithRelations<Record<string, never>> | undefined' is not assignable to type 'import("/home/adityasharma/projects/synapse/apps/server/node_modules/drizzle-orm/relations").ExtractTablesWithRelations<Record<string, never>> | undefined'
问题根源
Bun当前在Monorepo的依赖hoisting和类型解析逻辑上存在缺陷,导致子包与根目录重复安装了同一依赖的不同实例,类型系统将其识别为完全独立的类型,进而触发不兼容报错。
临时解决办法
- 开启强制依赖hoisting:在根目录
bunfig.toml中添加配置hoist = true,让所有子包共用根目录的node_modules,避免重复安装依赖 - 锁定依赖版本:在根
package.json里统一声明drizzle-orm等相关依赖的版本,禁止子包单独安装不同版本的同类型依赖 - 重装依赖:删除所有子包和根目录的
node_modules,执行bun install重新安装,确保依赖实例唯一 - 配置TS路径映射:在根
tsconfig.json中添加路径配置,强制类型解析器指向根目录的依赖:{ "compilerOptions": { "paths": { "drizzle-orm": ["./node_modules/drizzle-orm"] } } }
个人结论
不推荐使用Bun构建Monorepo,目前它在依赖管理和类型解析的稳定性上远不如pnpm、npm等成熟工具,这类跨包依赖冲突问题频繁出现,排查与解决成本较高。
内容的提问来源于stack exchange,提问作者Aditya Sharma
相关产品推荐
相关产品推荐

