升级Expo SDK49后无法使用Firebase第二代Functions的v2/https模块
解决方案
核心问题
你犯了一个常见错误:Expo客户端代码中意外引入了云端Functions的代码(functions/index.js)。firebase-functions是专门用于编写Firebase云端函数的依赖,只能在Node.js环境运行,不能在Expo的React Native客户端环境中使用,所以Expo Go打包时无法找到对应的模块文件。
修复步骤
检查并移除客户端代码对functions目录的引用
全局搜索Expo项目的代码,找到所有导入functions/index.js或者firebase-functions的地方,全部删除。客户端只需要使用firebaseSDK(比如firebase/app、firebase/firestore等)来调用云端函数,不需要直接引入云端函数的源码。确保云端Functions的依赖正确安装(可选,若部署正常可跳过)
虽然你部署成功了,但本地functions目录的依赖可能存在缓存问题,可重新安装:- 进入functions目录:
cd functions - 删除依赖文件:
rm -rf node_modules package-lock.json - 重新安装:
npm install
- 进入functions目录:
正确调用云端函数的方式
在Expo客户端代码中,使用Firebase客户端SDK调用已部署的onCall函数,示例:import { getFunctions, httpsCallable } from "firebase/functions"; import { initializeApp } from "firebase/app"; // 初始化Firebase app const firebaseApp = initializeApp({ /* 你的Firebase配置 */ }); const functions = getFunctions(firebaseApp, "europe-west1"); // 指定你的函数区域 const createPaymentIntent = httpsCallable(functions, "createPaymentIntent"); // 调用函数 const result = await createPaymentIntent({ /* 传递的数据 */ });
补充说明
- 云端Functions的代码(functions目录)和Expo客户端代码是完全分离的两个环境,客户端不需要访问或导入云端函数的源码,只需要通过Firebase SDK调用已部署的函数即可。
- 你之前能成功部署函数,说明云端环境的依赖是正常的,问题完全出在客户端代码错误引入了云端函数文件。
内容的提问来源于stack exchange,提问作者Yeloda
相关产品推荐
相关产品推荐

