在Amplify CLI创建的AWS Lambda中使用ES Modules遇错求助
解决Amplify CLI创建的Lambda ESM兼容问题
核心问题原因
Amplify CLI默认生成的Lambda函数配置与打包逻辑,未完全适配ESM模块模式,即便在package.json中设置"type":"module",运行时仍会以CommonJS方式加载模块,触发ERR_REQUIRE_ESM错误。
具体解决方案
1. 调整入口文件的ESM语法
将默认的CommonJS写法改为ESM规范:
- 原
index.js(CommonJS):
exports.handler = async (event) => { // 函数逻辑 };
- 修改为ESM语法:
export const handler = async (event) => { // 函数逻辑 };
2. 配置Amplify打包规则
在Lambda函数目录下创建amplify.yml(路径:amplify/backend/function/test/amplify.yml),添加打包配置确保Amplify CLI正确处理ESM模块:
backend: phases: build: commands: - cd src - npm install frontend: phases: build: commands: - echo "No frontend build needed" artifacts: baseDirectory: src files: - '**/*'
3. 本地模拟的适配操作
若amplify mock function仍报错,需确保本地Node.js版本与Lambda运行时(14.x/18.x)一致,同时在函数src目录下执行npm install,避免依赖包的CommonJS/ESM冲突。
4. 云端部署的验证要点
部署前确认:
- Lambda运行时设置为Node.js 14.x或18.x
- 函数执行角色权限配置正常
- 部署后在Lambda控制台测试,排查模块加载类错误
补充说明
部分第三方ESM包可能需额外处理:比如确认依赖包package.json的type字段为module,或使用动态导入import()方式加载混合模块。
内容的提问来源于stack exchange,提问作者Dave Meehan
相关产品推荐
相关产品推荐

