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

Firebase云函数使用node-fetch部署报ERR_REQUIRE_ESM如何解决

问题原因

你遇到的错误是因为node-fetch从v3版本开始,仅支持ESM模块规范,不能通过CommonJS的require()语法引入,而你当前的Firebase Cloud Functions项目默认使用CommonJS规范,因此出现兼容报错。

解决方案

方案1:降级node-fetch到v2版本(最简便,无需修改其他代码)

v2版本的node-fetch仍然支持CommonJS规范,完全适配你当前的项目环境,操作步骤如下:

  • 先卸载当前版本的node-fetch:
    npm uninstall node-fetch
  • 安装v2版本的node-fetch:
    npm install node-fetch@2
  • 修正package.json中的依赖配置,你当前的dependencies里node-fetch的值为file:node_modules/node-fetch是错误的本地路径引用,安装完v2版本后会自动更新为正常的版本号,例如:
"dependencies": {
  "firebase-admin": "^9.8.0",
  "firebase-functions": "^3.14.1",
  "node-fetch": "^2.6.12"
}

修改完成后重新部署即可,原有代码无需任何调整。

方案2:使用动态import加载node-fetch(无需降级,无需修改项目模块规范)

如果你需要使用node-fetch v3的新特性,可以在不调整项目整体模块规范的前提下,用异步动态import语法引入:
修改你的云函数代码如下:

const functions = require("firebase-functions");
const admin = require('firebase-admin');
admin.initializeApp();

exports.postalCode = functions.https.onCall( async (data, context) => {
    // 动态引入node-fetch
    const fetch = (await import('node-fetch')).default;
    const URL = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=100-0002';
    return fetch(URL).then(res => res.json());
});

方案3:将项目整体切换为ESM规范

如果你愿意调整项目整体的模块规范来适配ESM,可以按以下步骤操作:

  1. 在你的package.json中新增配置项"type": "module":
{
  "name": "functions",
  "type": "module",
  "description": "Cloud Functions for Firebase",
  // 其余原有配置保持不变
}
  1. 将所有require()语法替换为ESM的import语法,修改后的代码如下:
import functions from "firebase-functions";
import admin from 'firebase-admin';
import fetch from 'node-fetch';
admin.initializeApp();

exports.postalCode = functions.https.onCall( (data, context) => {
    const URL = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=100-0002';
    return fetch(URL).then(res => res.json());
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:24:03