You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地正常的Lambda部署到AWS后报502及语法错误求助

解决AWS Lambda部署后出现SyntaxError: Unexpected token '??='的问题

问题根源

虽然你的代码里没用到??=(ES2021空值合并赋值运算符),但这个错误说明打包后的代码或依赖包中存在该语法,而AWS Lambda的Node.js运行时版本不支持,或者webpack打包时未完成转译。本地运行正常是因为本地Node.js版本支持该语法,而Lambda默认的旧版本不支持。

具体解决方案

1. 升级Lambda的Node.js运行时版本

AWS Lambda的Node.js 14.x及以下版本不支持ES2021语法,需将Lambda函数的运行时升级到16.x及以上(推荐18.x或20.x):

  • 在serverless.yaml的provider字段中指定Node.js版本:
    provider:
      name: aws
      runtime: nodejs20.x # 替换为支持ES2021的版本
      # 其他配置...
    
  • 重新部署服务:sls deploy

2. 完善webpack+Babel转译配置

确保所有代码(包括依赖包中的新语法)都被转译为Lambda运行时支持的语法:

  1. 安装必要依赖:
    npm install --save-dev @babel/core @babel/preset-env @babel/preset-typescript babel-loader webpack webpack-cli
    
  2. 修改webpack.config.js,添加完整的转译配置:
    module.exports = {
      entry: './src/handler.ts',
      target: 'node',
      mode: process.env.NODE_ENV || 'production',
      module: {
        rules: [
          {
            test: /\.(ts|js)$/,
            // 若依赖包含新语法,可去掉exclude或指定要转译的包
            // exclude: /node_modules/,
            use: {
              loader: 'babel-loader',
              options: {
                presets: [
                  ['@babel/preset-env', {
                    targets: { node: '20' }, // 和Lambda运行时版本一致
                    useBuiltIns: 'usage',
                    corejs: 3
                  }],
                  '@babel/preset-typescript'
                ]
              }
            }
          }
        ]
      },
      resolve: { extensions: ['.ts', '.js'] },
      output: {
        libraryTarget: 'commonjs2',
        filename: 'handler.js',
        path: __dirname + '/dist'
      },
      externals: {
        'aws-sdk': 'aws-sdk' // 排除AWS SDK,Lambda环境自带
      }
    };
    
  3. 调整serverless.yaml中的webpack配置,指向正确的打包输出:
    custom:
      webpack:
        webpackConfig: ./webpack.config.js
        packager: 'npm'
        includeModules: false # 若用babel转译所有依赖,设为false避免重复打包
        # 其他配置...
    functions:
      myApi:
        handler: dist/handler.service # 指向webpack打包后的handler文件
        # 其他配置...
    

3. 排查依赖包

若升级运行时和完善转译后仍报错,检查依赖包是否使用新语法:

  • 执行npm ls查看依赖树,定位可能引入新语法的包
  • 尝试降级相关依赖到兼容旧Node版本的版本,或替换为更稳定的替代包

4. 本地模拟Lambda测试

用serverless invoke local命令在本地模拟Lambda执行,快速排查打包后的代码问题:

sls invoke local --function myApi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:50:34