跟随Full Stack React & Firebase教程做注册时出现ERR_PACKAGE_PATH_NOT_EXPORTED报错
错误根因
该报错由服务端云函数环境错误引入客户端Firebase SDK导致:你当前使用的v9及以上版本的客户端Firebase包调整了模块导出结构,package.json没有定义默认主导出入口,在Node.js环境直接require客户端firebase包就会触发ERR_PACKAGE_PATH_NOT_EXPORTED错误。
Cloud Functions作为服务端运行环境,应该使用专门的Firebase Admin SDK,而非面向前端的客户端SDK。
解决步骤
- 首先进入项目的
functions目录,卸载错误安装的客户端firebase包:npm uninstall firebase - 安装服务端专用Firebase Admin SDK:
npm install firebase-admin - 替换
index.js中的Firebase初始化逻辑,移除原有客户端firebase的引入和初始化代码,替换为Admin SDK的初始化代码:
const admin = require('firebase-admin'); // 本地调试时引入你从Firebase控制台下载的服务账号密钥文件,部署到Firebase后会自动读取环境凭证无需手动传入 const serviceAccount = require('./你的服务账号密钥文件名.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });
- 调整signup路由的用户创建逻辑,Admin SDK的创建用户方法与客户端不同,修改后的代码如下:
// Signup route app.post("/signup", (req, res) => { const newUser = { email: req.body.email, password: req.body.password, confirmPassword: req.body.confirmPassword, handle: req.body.handle, }; admin .auth() .createUser({ email: newUser.email, password: newUser.password, displayName: newUser.handle }) .then((userRecord) => { return res .status(201) .json({ message: `user ${userRecord.uid} signed up successfully` }); }) .catch((err) => { console.error(err); return res.status(500).json({ error: err.code }); }); });
可选兼容方案
如果你需要完全匹配教程中的客户端SDK写法,可以将firebase包降级到v8版本,无需替换为Admin SDK,执行如下命令即可:npm install firebase@8.10.0
该方案不推荐用于生产环境,服务端场景下Admin SDK的权限控制、运行适配性都优于客户端SDK。
内容的提问来源于stack exchange,提问作者Jacob Sherwood
相关产品推荐
相关产品推荐

