本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 中的 esbuild 建置 Node.js Lambda 函數 AWS SAM
若要建置和封裝 Node.js AWS Lambda 函數,您可以使用 AWS SAMCLI搭配 esbuild JavaScript bundler。esbuild bundler 支援您在 TypeScript 中寫入的 Lambda 函數。
若要使用 esbuild 建置 Node.js Lambda 函數,請將Metadata物件新增至您的AWS:Serverless::Function資源,並為 esbuild 指定 BuildMethod。當您執行 sam build命令時, AWS SAM 會使用 esbuild 來綁定 Lambda 函數程式碼。
中繼資料屬性
Metadata 物件支援 esbuild 的下列屬性。
BuildMethod
為您的應用程式指定綁定器。唯一支援的值為 esbuild。
BuildProperties
指定 Lambda 函數程式碼的建置屬性。
BuildProperties 物件支援 esbuild 的下列屬性。所有屬性都是選用的。根據預設, AWS SAM 會將 Lambda 函數處理常式用於進入點。
- EntryPoints
-
指定應用程式的進入點。
- 外部
-
指定要從建置中省略的套件清單。如需詳細資訊,請參閱 esbuild 網站的外部
。 - 格式
-
指定應用程式中產生的 JavaScript 檔案的輸出格式。如需詳細資訊,請參閱 esbuild 網站上的格式化
。 - 載入器
-
指定用於載入指定檔案類型資料的組態清單。
- MainFields
-
指定解析套件時要嘗試匯入
package.json的欄位。預設值為main,module。 - Minify
-
指定是否將綁定的輸出程式碼縮略。預設值為
true。 - OutExtension
-
自訂esbuild 產生的檔案副檔名。如需詳細資訊,請參閱 esbuild 網站中的輸出延伸
模組。 - 來源映射
-
指定綁定器是否產生來源映射檔案。預設值為
false。設定為 時
true,NODE_OPTIONS: --enable-source-maps會附加到 Lambda 函數的環境變數,並產生來源映射並包含在函數中。或者,當
NODE_OPTIONS: --enable-source-maps包含在函數的環境變數中時,Sourcemap會自動設定為true。衝突時,
Sourcemap: false優先於NODE_OPTIONS: --enable-source-maps。注意
根據預設,Lambda 會使用 AWS Key Management Service () 加密所有靜態環境變數AWS KMS。使用來源映射時,為了讓部署成功,函數的執行角色必須具有執行
kms:Encrypt動作的許可。 - SourcesContent
-
指定是否要在來源映射檔案中包含您的原始碼。
Sourcemap將此屬性設定為 時'true'。-
指定
SourcesContent: 'true'以包含所有原始程式碼。 -
指定
SourcesContent: 'false'以排除所有原始程式碼。這會導致來源映射檔案大小變小,這有助於減少啟動時間,進而在生產環境中發揮效用。不過,在偵錯工具中無法使用原始程式碼。
預設值為
SourcesContent: true。如需詳細資訊,請參閱 esbuild 網站上的來源內容
。 -
- 目標
-
指定目標 ECMAScript 版本。預設值為
es2020。
TypeScript Lambda 函數範例
下列範例 AWS SAM 範本程式碼片段使用 esbuild 從 中的 TypeScript 程式碼建立 Node.js Lambda 函數hello-world/app.ts。
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.handler Runtime: nodejs20.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 External: - "<package-to-exclude>"