使用Middy官方中间件触发SyntaxError,自定义中间件可正常运行
问题分析与解决方案
问题根源
Unexpected token '??=' 错误是因为代码中使用了Node.js 14不支持的ES2021语法(空赋值运算符)。你的Lambda运行环境是Node.js 14,但Middy官方中间件(如httpJsonBodyParser、httpErrorHandler)的内部代码包含了该语法,而你的编译流程没有将这些依赖代码转译为Node.js 14兼容的版本,导致运行时触发语法错误。
解决方案
1. 升级Lambda运行时版本(推荐)
Node.js 14已终止官方维护,直接将Lambda运行时升级到Node.js 16或更高版本(Node.js 16及以上原生支持??=运算符),无需修改代码或编译配置即可解决问题。
2. 降级Middy到兼容Node.js 14的版本
如果必须保留Node.js 14运行时,可降级Middy至v2.x系列(Middy v3+版本要求Node.js 16+)。执行以下命令:
npm install middy@2.x
同时确保所有Middy官方中间件也使用对应v2版本(如@middy/http-json-body-parser@2.x、@middy/http-error-handler@2.x)。
3. 配置打包工具转译依赖代码
若坚持使用当前Middy版本和Node.js 14,需配置打包工具(如esbuild、webpack)将node_modules中的Middy相关代码一起转译为Node.js 14兼容语法:
- 以esbuild为例,打包命令添加目标参数:
esbuild src/handler.ts --bundle --platform node --target node14 --outfile dist/handler.js
- 若使用TypeScript直接编译,需确保
tsconfig.json的target设为ES2020(Node.js 14支持的最高ES版本),同时使用tsc结合ts-node或其他工具转译依赖代码(注意:默认tsc不会转译node_modules,可能需要额外配置)。
内容的提问来源于stack exchange,提问作者zlZimon
相关产品推荐
相关产品推荐

