Node.js连接Firebase遇module.exports导出错误,求解决方案
解决Node.js连接Firebase时的
ERR_PACKAGE_PATH_NOT_EXPORTED错误 错误原因
这个错误是因为Firebase SDK v9及以上版本采用了ECMAScript模块(ESM)的导出结构,你当前用CommonJS的require()直接导入firebase包,无法找到正确的导出入口。
解决方案
方案1:使用Firebase兼容CommonJS的版本(快速修复)
修改config.js的导入逻辑,改用Firebase提供的compat兼容层适配CommonJS语法:
// config.js 修改后 const firebase = require("firebase/compat/app"); // 导入firestore的兼容版本 require("firebase/compat/firestore"); const firebaseConfig = { apiKey: "", authDomain: "", projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "" }; firebase.initializeApp(firebaseConfig); const db = firebase.firestore(); const User = db.collection("Users"); module.exports = User;
确保已安装firebase包:
npm install firebase
方案2:切换到ECMAScript模块(ESM)语法(推荐长期方案)
如果想使用Firebase SDK的最新特性,可将项目切换为ESM:
- 在
package.json中添加"type": "module" - 修改所有文件的导入语法:
index.js修改后:
import express from "express"; import cors from "cors"; import User from "./config.js"; const app = express(); app.use(express.json()); app.use(cors()); app.get('/', async(req,res) => { const snapshot = await User.get(); const list = snapshot.docs.map((doc) => ({ id: doc.id, ...doc.data() })); res.send(list); }) app.listen(4000, () => { console.log("Server running at port 4000") })
config.js修改后:
import { initializeApp } from "firebase/app"; import { getFirestore, collection } from "firebase/firestore"; const firebaseConfig = { apiKey: "", authDomain: "", projectId: "", storageBucket: "", messagingSenderId: "", appId: "", measurementId: "" }; const app = initializeApp(firebaseConfig); const db = getFirestore(app); const User = collection(db, "Users"); export default User;
额外注意事项
- 务必填写完整且正确的Firebase配置信息,否则应用初始化会失败
- 若使用方案2,确保Node.js版本在16.x及以上,以良好支持ESM语法
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

