本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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。设置为时
true,NODE_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