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

使用Esbuild部署Serverless TypeScript至AWS Lambda时文件扩展名适配问题

解决Serverless+esbuild生成.js而非.mjs的问题

问题原因

你配置了outExtension但未生效,大概率是因为缺少明确的entryPoints配置,或者serverless-esbuild插件版本过旧,导致esbuild没有正确应用扩展名替换规则。另外,Lambda要求ESM格式的函数必须使用.mjs扩展名,同时函数的handler配置也需要对应更新。

解决方案

1. 更新serverless-esbuild插件

确保使用最新版本的插件,避免旧版本的兼容性问题:

npm install serverless-esbuild@latest --save-dev

2. 修改serverless.yml配置

完善esbuild配置,添加entryPoints

明确指定你的源入口文件(比如handler.ts或handler.js),让esbuild精准处理扩展名替换:

build:
  esbuild:
    bundle: true
    minify: false
    external:
      - "uuid"
    exclude: "*"
    format: esm
    outExtension:
      '.js': '.mjs'
    entryPoints:
      - handler.ts # 替换成你的实际源文件路径,比如handler.js

更新函数handler配置

Lambda识别ESM函数时,需要明确指定.mjs后缀:

functions:
  hello:
    handler: handler.mjs.hello # 原handler: handler.hello 修改为 handler.mjs.hello
    events:
      - httpApi:
          path: /hello
          method: get

3. (可选)验证TypeScript配置(如果用TS)

如果你的源文件是TypeScript,确保tsconfig.json的module字段匹配ESM格式:

{
  "compilerOptions": {
    "module": "ESNext",
    "target": "ES2020",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true
  }
}

验证结果

重新执行serverless deploy或serverless package,编译产物应该会生成handler.mjs和handler.mjs.map,无需手动修改扩展名即可正常部署到Lambda。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:45:10