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

Gatsby从外部API拉取数据时gatsby-node.js报export语法错误如何解决?

错误根因
  • gatsby-node.js 默认采用 CommonJS 模块规范,你直接使用 ES 模块的 export 导出语法不被 Node.js 识别,所以触发了语法报错。
  • 你的代码本身存在笔误:fetchWinesAndTurnIntoNodes 函数前的关键字写错了,应该是 async 不是 sync,否则函数内部的 await 关键字后续也会触发语法错误。
解决方案

方案1(推荐,无额外适配成本):统一使用 CommonJS 语法

修改 gatsby-node.js 代码如下:

// 补全async关键字
async function fetchWinesAndTurnIntoNodes() {
    const res = await fetch('https://api.sampleapis.com/wines/reds');
    const wines = await res.json();
    console.log(wines)
}

// 用CommonJS的module.exports替代ES模块的export
module.exports.sourceNodes = async function(params) {
    await Promise.all([fetchWinesAndTurnIntoNodes(params)]);
}

改完后重新运行 gatsby develop 即可正常启动。

方案2:切换为ES模块规范

如果你坚持要用 ES 模块的 export 语法,可以二选一操作:

  • 把 gatsby-node.js 重命名为 gatsby-node.mjs,Node.js 会自动按ES模块规则解析该文件
  • 在项目根目录的 package.json 中新增配置项 "type": "module",该配置会让项目下所有.js文件默认按ES模块解析

注意:选择第二种方案的话,项目内所有Gatsby配置文件(比如gatsby-config.js、gatsby-browser.js等)都要统一改成ES模块语法,否则会触发新的模块解析报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:57:04