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

Azure本地开发函数使用import语句报错:Cannot use import statement outside a module

Azure Functions本地运行node-fetch模块报错解决

问题背景

本地开发Azure Functions时,导入node-fetch模块后触发错误:

Worker was unable to load function HttpTrigger1: 'Cannot use import statement outside a module'

已尝试在package.json添加type: 'module'、将函数文件命名为index.cjs,但问题未解决。

核心原因

当前配置存在模块系统冲突:

  • package.json设置了type:module(默认.js文件识别为ES模块),但函数文件用了.cjs后缀(强制识别为CommonJS模块)
  • 代码中混用了ES模块的import语法和CommonJS的module.exports导出方式

可行解决方案

方案一:统一使用ES模块(推荐)

  1. 将函数文件重命名为index.js(因package.json已设type:module,.js文件会被识别为ES模块)
  2. 修改代码导出语法,替换module.exports为ES模块的export default:
import { fetch } from "node-fetch";

export default async function (context, req) {
  context.log("JavaScript HTTP trigger function processed a request.");

  const res = await fetch("https://www.swyx.io/api/rss.xml");

  const responseMessage = "res:" + res.ok;

  context.res = {
    body: responseMessage,
  };
};
  1. 重启本地函数服务(重新执行func start)

方案二:统一使用CommonJS模块

  1. 删除package.json中的"type": "module"配置项
  2. 将代码中的ES模块import替换为CommonJS的require语法,文件可保留index.cjs或改回index.js:
const fetch = require("node-fetch");

module.exports = async function (context, req) {
  context.log("JavaScript HTTP trigger function processed a request.");

  const res = await fetch("https://www.swyx.io/api/rss.xml");

  const responseMessage = "res:" + res.ok;

  context.res = {
    body: responseMessage,
  };
};
  1. 重启本地函数服务

为什么之前的尝试无效

  • 添加type:module后用index.cjs:.cjs后缀会强制Node.js将文件视为CommonJS模块,此时使用ES的import语法必然报错
  • 仅改文件名为.cjs但未调整import:CommonJS模块不支持import语句,必须改用require

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:55:16