Express.js项目导入Firebase 9时报ERR_PACKAGE_PATH_NOT_EXPORTED错误如何解决?
解决方案
问题根源
Firebase 9 开始默认采用ESM模块化API,移除了旧版本直接require('firebase')的全量导出入口,所以会触发ERR_PACKAGE_PATH_NOT_EXPORTED错误。同时你当前的Firebase配置项存在值错位的问题,即使解决导入错误也会导致后续初始化异常。
修复步骤
1. 修改Firebase初始化文件写法
如果要继续使用CommonJS的require语法,需要导入Firebase 9提供的向后兼容版本,同时修正配置错位问题:
// 导入compat版本的核心包和firestore const firebase = require('firebase/compat/app'); require('firebase/compat/firestore'); require('dotenv').config(); const firebaseConfig = { apiKey: process.env.FIREBASE_API_KEY, authDomain: process.env.FIREBASE_AUTH_DOMAIN, databaseURL: process.env.FIREBASE_DATABASE_URL, // 你之前这里错填为PROJECT_ID,需替换为对应环境变量 projectId: process.env.FIREBASE_PROJECT_ID, // 你之前这里错填为STORAGE_BUCKET,需修正 storageBucket: process.env.FIREBASE_STORAGE_BUCKET, // 你之前这里错填为MESSAGING_SENDER_ID,需修正 messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID, appId: process.env.FIREBASE_APP_ID }; const app = firebase.initializeApp(firebaseConfig); // 导出firebase实例即可 module.exports = firebase;
2. 修改路由文件的导入逻辑
const express=require('express'); const router=express.Router(); const firebase = require('../firebase'); const firestore = firebase.firestore(); router.get('/',(req,res)=>{ res.send('Hello World'); }); module.exports = router;
可选优化方案
如果你是在Node.js后端场景使用Firebase,更推荐使用专为服务端设计的firebase-admin SDK,权限管控和服务端特性支持更好,安装后初始化写法如下:
const admin = require('firebase-admin'); require('dotenv').config(); admin.initializeApp({ credential: admin.credential.applicationDefault(), // 也可以直接传入上面修正后的firebaseConfig配置 }); const db = admin.firestore(); module.exports = { admin, db };
内容的提问来源于stack exchange,提问作者Sarim Hassan
相关产品推荐
相关产品推荐

