You need to enable JavaScript to run this app. Node.js ES6导入Amplify生成的aws-exports.js报export语法错误咨询
优惠活动
大模型
产品
解决方案
定价
更多

Node.js ES6导入Amplify生成的aws-exports.js报export语法错误咨询

问题根因

Node.js对模块格式的判定规则是以被导入的文件自身属性为依据,和导入方的文件格式无关:

  • 当Node解析aws-exports.js时,会向上查找该文件所在目录链上最近的package.json配置,如果未设置"type": "module",就会默认把这个.js文件按CommonJS格式解析
  • CommonJS运行环境不识别ESM的顶层export语法,因此会直接抛出SyntaxError: Unexpected token 'export'

需要明确:并非必须全局设置package.json的type字段为module才能正常加载这个配置文件,Node的模块判定是分文件粒度的,不存在全局一刀切的强制要求。

可落地的解决方案
  • 最小改动方案:直接将../src/aws-exports.js重命名为aws-exports.mjs
    Node看到.mjs后缀会自动把文件识别为ESM格式,不需要修改任何项目全局配置,也不会影响项目里其他CommonJS格式的.js文件的正常运行。
    这个配置文件本身就是标准ESM语法,和Node的.mjs识别规则完全适配,改动成本几乎为零。如果不想每次Amplify重新生成配置后手动改后缀,可以在package.json的脚本里加一行自动重命名的钩子,比如配置post-amplify-pull脚本,每次拉取完Amplify配置后自动执行重命名操作。
  • 无侵入适配方案:保留原aws-exports.js文件名,写一层轻量适配
    新建独立的适配文件aws-exports-adapter.mjs,把Amplify生成的纯配置对象以ESM语法重新导出。因为配置文件本身没有任何逻辑代码,只是键值对形式的配置参数,直接把原js里的配置内容拷贝到适配文件中,加上标准的export default语句即可,后续业务代码全部从这个适配文件导入配置,完全不需要修改原Amplify生成的文件。
  • 全项目适配方案:当项目本身已经计划全量切换到ESM语法时
    可以在项目根的package.json中设置"type": "module",此时Node会把项目内所有普通.js文件默认识别为ESM格式,自然能识别aws-exports.js里的导出语法。
    但需要注意这个改动是全局生效的,会导致项目里所有原CommonJS格式的.js文件全部运行报错,需要手动将这些CJS文件重命名为.cjs后缀,改动成本较高,不适合仅为了加载这一个配置文件就做全局调整的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 15:15:09