通过Serverless部署Node20 AWS Lambda函数遇CommonJS模块导入错误
问题排查与解决方案
1. 升级Serverless Framework版本
旧版本的Serverless对Node.js 20.x Lambda运行时的打包逻辑存在兼容性问题,会导致部署后模块加载异常。
- 执行命令升级到最新稳定版:
npm install -g serverless@latest
2. 修改Handler导出形式
虽然CommonJS规范支持对象式导出,但Node20.x的Lambda运行时加载器对这种导出的解析存在差异。
- 将handler文件的导出代码改为直接绑定形式:
const handler = async (event, context) => { console.log('event:', JSON.stringify(event), JSON.stringify(context)); try { return await routeInvoice(event); } catch (err) { console.error('routeInvoice handler error:', err); throw err; } }; // 替换原对象导出为直接赋值 module.exports.handler = handler;
3. 检查Serverless打包配置
确认serverless.yml中的打包规则没有误排除handler所在文件:
- 如果有自定义
package配置,确保包含目标文件路径:package: include: - src/functions/**
4. 验证打包文件完整性
本地执行依赖原生文件结构,而云端依赖打包后的zip包,可能存在路径或文件缺失:
- 执行
sls package生成打包文件,在.serverless目录下解压对应zip包,确认src/functions/routeInvoice/routeInvoice.js存在且路径与配置一致。
内容的提问来源于stack exchange,提问作者Anders
相关产品推荐
相关产品推荐

