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

Next.js项目中Firebase与@grpc/grpc-js不兼容报错如何解决

错误原因

该报错是Next.js 12的严格ES模块校验与@grpc/grpc-js的CommonJS规范不兼容导致:@grpc/grpc-js为CommonJS类型模块,不支持命名导入,而Firebase 9.6.0内部对其使用了命名导入写法,触发了Next.js的校验规则。

可行修复方案

方案1:配置Next.js兼容规则(无侵入,优先选择)

在项目根目录的next.config.js中添加如下配置,宽松处理CommonJS模块的命名导入兼容:

module.exports = {
  experimental: {
    // 开启宽松ES模块外部依赖校验,自动兼容CommonJS的命名导入
    esmExternals: "loose"
  },
  // Next.js 12.1及以上版本可额外添加转译配置,确保兼容性
  transpilePackages: ['@grpc/grpc-js', 'firebase']
}

配置完成后重启项目即可生效,无需修改依赖或业务代码。

方案2:调整依赖到兼容版本

经过验证,以下依赖组合不存在该兼容性问题,可根据项目情况选择:

  • 单独降级Firebase版本到9.5.0,执行命令:
    npm install firebase@9.5.0
  • 同步升级依赖:将Next.js升级到12.1.6及以上版本,同时将Firebase升级到9.x分支的最终稳定版9.23.0,升级完成后即可解决兼容性问题。

方案3:修正导入写法

如果你的业务代码中直接用到了@grpc/grpc-js,将所有命名导入改为默认导入写法即可:

// 错误写法
// import { credentials, loadPackageDefinition, Metadata } from '@grpc/grpc-js'

// 正确写法
import grpc from '@grpc/grpc-js'
const { credentials, loadPackageDefinition, Metadata } = grpc

额外注意事项

如果你的项目仅需在浏览器端使用Firebase,不要在客户端代码中引入Firebase服务端/Admin相关模块,该类模块才会依赖@grpc/grpc-js,仅引入客户端SDK不会触发该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:24:02