Monorepo中Firebase实例跨包传递及依赖配置问题求助
解决Monorepo中Utils包共享Firebase实例的问题
问题背景
我搭建了Monorepo结构的项目,计划把Firebase相关通用函数放到packages/utils包实现共享。为适配不同环境的Firebase项目,需要将Firestore或其他Firebase服务实例传递给utils中的函数,但传递时触发了Stack Overflow曾提及的错误。于是我将firebase配置在utils包的peerDependencies中(未放入dependencies),结果utils包内所有Firebase相关函数均无法正常工作。
已尝试方案
- 给utils包执行
yarn add firebase:原错误复现 - 禁用TypeScript检查:仍无法完成编译
期望目标
- 成功将Firestore实例传递给工具函数
- 在
packages/utils/src/index.ts中正常使用Firebase相关库
Monorepo结构
monorepo/ apps/ web/ - package.json react-native - package.json packages/ utils/ - package.json src/ - index.ts
现有配置
packages/utils/package.json
{ // 其他配置项 "peerDependencies": { "firebase": "^9.6.3" // 仅在此处配置firebase,未放入dependencies } }
apps/web/package.json
{ // 其他配置项 "dependencies": { "firebase": "^9.6.3" } }
解决方案
1. 确保peerDependencies依赖链路正常
peerDependencies仅声明依赖要求,不会自动安装,需确保宿主包(如web、react-native)已安装对应版本的firebase,且Monorepo内所有包使用的firebase版本完全一致,避免多实例冲突。
2. 规范Utils包中Firebase的使用方式
不要在utils包内初始化Firebase实例,而是通过参数接收宿主传递的实例,同时导入Firebase类型做校验:
// packages/utils/src/index.ts import type { Firestore, DocumentData, QuerySnapshot } from "firebase/firestore"; // 示例工具函数:接收Firestore实例并查询数据 export async function fetchDocuments(db: Firestore, collectionPath: string): Promise<QuerySnapshot<DocumentData>> { const collectionRef = db.collection(collectionPath); return collectionRef.get(); }
3. 修复Monorepo依赖链接
如果使用Yarn Workspaces,需在根目录package.json中启用workspaces配置:
{ "workspaces": [ "apps/*", "packages/*" ] }
之后在根目录执行yarn install,确保依赖正确链接,避免utils包找不到Firebase的类型定义。
4. 配置TypeScript路径映射(可选)
若TypeScript报错找不到firebase模块,可在utils包的tsconfig.json中添加路径映射:
{ "compilerOptions": { "baseUrl": ".", "paths": { "firebase/*": ["../../node_modules/firebase/*"] } } }
5. 避免重复安装Firebase
确保utils包的dependencies和devDependencies中均无firebase,仅保留peerDependencies配置,杜绝多实例冲突。
内容的提问来源于stack exchange,提问作者ttt
相关产品推荐
相关产品推荐

