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

AWS Serverless架构下Webpack部署Lambda脚本失败求助

Serverless + Webpack 打包Lambda找不到Handler的解决方案

核心原因

Webpack打包后会改变代码的输出路径和模块结构,而你的serverless.yml仍指向原未打包的文件路径,导致Serverless无法找到正确的handler入口。

具体解决步骤

1. 修正serverless.yml的handler路径

如果Webpack将Lambda代码打包到dist目录下(每个Lambda对应单独的打包文件),需要把handler配置改为打包后的路径:

functions:
  getProperties:
    handler: dist/getProperties.handler # 原路径是lambdas/getProperties.handler
    # 其他配置(比如events、内存等)

2. 调整Webpack配置适配Lambda要求

修改webpack.config.js,确保打包后的代码符合AWS Lambda的运行环境:

const path = require('path');

module.exports = {
  entry: {
    getProperties: './lambdas/getProperties.js', // 每个Lambda文件作为单独入口
    // 若有其他Lambda,继续添加:otherFunc: './lambdas/otherFunc.js'
  },
  output: {
    filename: '[name].js', // 按入口名称生成打包文件
    path: path.resolve(__dirname, 'dist'),
    libraryTarget: 'commonjs2', // 关键:生成Lambda可识别的CommonJS模块
  },
  target: 'node', // 指定打包目标为Node.js环境,避免打包浏览器兼容代码
  mode: 'production',
  externals: {
    // 如果某些依赖不需要打包(比如AWS SDK,Lambda环境自带),可以在这里声明
    'aws-sdk': 'aws-sdk'
  }
};

3. 确保Serverless Webpack插件配置正确

如果使用serverless-webpack插件,在serverless.yml中添加插件配置:

plugins:
  - serverless-webpack

custom:
  webpack:
    webpackConfig: ./webpack.config.js
    includeModules: true # 自动打包项目依赖(若依赖不在Lambda环境中)
    packager: 'npm' # 或yarn,根据你的包管理器选择

4. 检查Lambda代码的导出格式

确保你的getProperties.js中handler是用CommonJS规范导出的:

exports.handler = async (event) => {
  // 业务逻辑代码
  return {
    statusCode: 200,
    body: JSON.stringify({ message: 'Success' })
  };
};

避免使用ES6默认导出(export default handler),除非你在Webpack中配置了对应的转换规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 01:15:06