使用 esbuild 构建 Node.js Lambda 函数 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 esbuild 构建 Node.js Lambda 函数

要构建和打包 Node.jsAmazon Lambda 函数,你可以将Amazon SAM命令行界面与 es JavaScript build 打包器一起使用。esbuild 打包器支持你编写的 Lambda 函数 TypeScript。

要使用 esbuild 构建 Node.js Lambda 函数,请向您的AWS:Serverless::Function资源添加一个Metadata对象esbuild并为指定BuildMethod。当你运行sam build命令时,Amazon SAM使用 esbuild 捆绑你的 Lambda 函数代码。

元数据属性

Metadata对象支持 esbuild 的以下属性。

BuildMethod

为您的应用程序指定打包器。esbuild 是唯一受支持的值。

BuildProperties

为您的 Lambda 函数代码指定编译属性。

BuildProperties对象支持 esbuild 的以下属性。所有属性均为可选属性。默认情况下,Amazon SAM使用您的 Lambda 函数处理程序作为入口点。

EntryPoints

为您的应用程序指定入口点。

外部

指定要从构建中省略的包列表。

格式

指定应用程序中生成 JavaScript 文件的输出格式。有关更多信息,请参阅 esbuild 网站中的格式

加载程序

指定用于加载给定文件类型的数据的配置列表。

MainFields

指定在解析包时尝试导入哪些package.json字段。默认值为 main,module

缩小

指定是否缩小捆绑的输出代码。默认值为 true

OutExtension

自定义 esbuild 生成的文件的文件扩展名。有关更多信息,请参阅 esbuild 网站中的 Ou t 扩展

源地图

指定打包器是否生成源映射文件。默认值为 false

设置为时trueNODE_OPTIONS: --enable-source-maps将附加到 Lambda 函数的环境变量中,然后生成源映射并将其包含在函数中。

或者,NODE_OPTIONS: --enable-source-maps当包含在函数的环境变量中时,Sourcemap会自动设置为true

发生冲突时,Sourcemap: false优先于NODE_OPTIONS: --enable-source-maps

注意

默认情况下,Lambda 使用Amazon Key Management Service (Amazon KMS) 加密所有静态环境变量。使用源映射时,要成功进行部署,您的函数的执行角色必须具有执行kms:Encrypt操作的权限。

SourcesContent

指定是否在源地图文件中包含源代码。设置为时Sourcemap配置此属性true

  • 指定SourcesContent: true包含所有源代码。

  • 指定SourcesContent: false排除所有源代码。这会导致源地图文件大小变小,这可以通过缩短启动时间在生产中很有用。但是,调试器中将无法使用源代码。

默认值为 SourcesContent: true

有关更多信息,请参阅 esbuild 网站中的源代码内容

目标

指定目标 ECMAScript 版本。默认值为 es2020

TypeScript Lambda 函数示例

以下示例Amazon SAM模板片段使用 esbuild 根据中的 TypeScript 代码创建 Node.js Lambda 函数hello-world/app.ts

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.handler Runtime: nodejs14.x Architectures: - x86_64 Events: HelloWorld: Type: Api Properties: Path: /hello Method: get Environment: Variables: NODE_OPTIONS: --enable-source-maps Metadata: BuildMethod: esbuild BuildProperties: Format: esm Minify: false OutExtension: - .js=.mjs Target: "es2020" Sourcemap: true EntryPoints: - app.ts