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模块(推荐)
- 将函数文件重命名为
index.js(因package.json已设type:module,.js文件会被识别为ES模块) - 修改代码导出语法,替换
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, }; };
- 重启本地函数服务(重新执行
func start)
方案二:统一使用CommonJS模块
- 删除
package.json中的"type": "module"配置项 - 将代码中的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, }; };
- 重启本地函数服务
为什么之前的尝试无效
- 添加
type:module后用index.cjs:.cjs后缀会强制Node.js将文件视为CommonJS模块,此时使用ES的import语法必然报错 - 仅改文件名为
.cjs但未调整import:CommonJS模块不支持import语句,必须改用require
内容的提问来源于stack exchange,提问作者Hasan Aga
相关产品推荐
相关产品推荐

