You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js连接Firebase实现CRUD时模块导入错误求助

Firebase模块导入错误排查与修复方案

问题场景

尝试通过Node.js连接Firebase并创建用户数据提交接口,在server.js中导入Firebase模块时触发以下错误:

Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in /Users/node_modules/firebase/package.json imported from /Users/nextjs-nodejs-example/api/server.js
    at throwExportsNotFound (internal/modules/esm/resolve.js:285:9)
    at packageExportsResolve (internal/modules/esm/resolve.js:508:3)
    at packageResolve (internal/modules/esm/resolve.js:639:14)
    at moduleResolve (internal/modules/esm/resolve.js:691:18)
    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:805:11)
    at Loader.resolve (internal/modules/esm/loader.js:88:40)
    at Loader.getModuleJob (internal/modules/esm/loader.js:241:28)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:72:40)
    at link (internal/modules/esm/module_job.js:71:36) {
  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'
}

错误原因

  1. Firebase版本架构变更:v9+版本采用模块化设计,不再支持import firebase from 'firebase'这种全局导入方式,必须按功能模块单独导入。
  2. 导入对象错误:server.js中导入的是npm全局包firebase,而非你自己编写的firebase.js配置文件。
  3. firebase.js存在多处问题:
    • 后端环境无需Analytics服务,调用getAnalytics不仅无用还会因db变量未定义报错
    • 混用ES模块(import)和CommonJS导出(module.exports),导致模块加载不兼容
    • 未正确初始化并导出Firestore实例

修复步骤与修正代码

1. 修正firebase.js配置文件

// firebase.js
import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

// 填入你的Firebase配置信息
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_SENDER_ID",
  appId: "YOUR_APP_ID"
};

// 初始化Firebase应用
const app = initializeApp(firebaseConfig);
// 初始化并导出Firestore实例
const db = getFirestore(app);

export default db;

2. 修正server.js核心代码

// server.js
import express from 'express';
import path from 'path';
import bodyParser from "body-parser";
const app = express(),
      port = 3080;
// 导入本地Firebase配置文件
import db from './firebase.js';
// 导入Firestore模块化操作方法
import { collection, addDoc } from "firebase/firestore";

app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, '../my-app/out')));
process.setMaxListeners(0);
const router = express.Router();

// 先定义处理函数,再绑定路由
const addUser = async (req, res) => {
  try {
    console.log("Adding new user");
    const data = req.body;
    // 使用模块化方法添加文档
    await addDoc(collection(db, "Users"), data);
    res.status(201).json({ message: "Record saved successfully" });
  } catch (error) {
    res.status(400).json({ message: error.message });
  }
};

router.post("/api/user", addUser);
// 挂载路由到应用
app.use('/', router);

app.listen(port, () => {
    console.log(`Server listening on the port::${port}`);
});

关键修改点说明

  • 导入逻辑修正:将全局firebase包导入改为本地配置文件导入,适配Firebase v9+模块化API
  • bodyParser导入修正:body-parser为默认导出,无需解构导入
  • 函数顺序调整:先定义addUser再绑定路由,避免变量未定义错误
  • 路由挂载:添加app.use('/', router)确保接口路由生效
  • Firestore操作升级:使用addDoc替代旧版doc().set(),符合新版本API规范
  • 移除无用代码:删除后端不需要的Analytics初始化逻辑

内容的提问来源于stack exchange,提问作者hussain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:31