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
相关产品推荐
相关产品推荐

