本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在中使用網路建置來建置 Node.js Lambda 函數 AWS SAM
要構建和打包 Node.js AWS Lambda 函數,您可以使用 AWS SAMCLI與 esbuild JavaScript 捆綁程序。電子構建捆綁程序支持您編寫的 Lambda 函數。 TypeScript
若要使用電子建置來建置 Node.js Lambda 函數,請將Metadata
物件新增至您的AWS:Serverless::Function
資源,並esbuild
為. BuildMethod
當您執行sam build命令時, AWS SAM 會使用電子建置來捆綁您的 Lambda 函數程式碼。
元數據屬性
該Metadata
對象支持以下 ebuild 屬性。
BuildMethod
指定應用程式的捆綁器。唯一支援的值為 esbuild
。
BuildProperties
指定 Lambda 函數程式碼的組建屬性。
該BuildProperties
對象支持以下 ebuild 屬性。所有屬性都是可選的。依預設, AWS SAM 會使用 Lambda 函數處理常式做為入口點。
- EntryPoints
-
指定應用程式的進入點。
- 外部
-
指定要從組建中省略的套件清單。如需詳細資訊,請參閱esbuild網站中的「外部
」。 - 格式
-
指定應用程式中產生 JavaScript 檔案的輸出格式。如需詳細資訊,請參閱 esbuild 網站中的格式
。 - 載入器
-
指定載入給定檔案類型之資料的組態清單。
- MainFields
-
指定解析封裝時要嘗試匯入的
package.json
欄位。預設值為main,module
。 - 縮小
-
指定是否要縮小隨附的輸出程式碼。預設值為
true
。 - OutExtension
-
自訂 esbuild 所產生之檔案的副檔名。如需詳細資訊,請參閱 esbuild 網站中的 Out 擴充功
能。 - 源映射
-
指定捆綁器是否產生源映射文件。預設值為
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 範本程式碼片段使用電子建置,從中hello-world/app.ts
的程式 TypeScript 碼建立 Node.js Lambda 函數。
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>
"