

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 中使用 esbuild 建置 Node.js Lambda 函數 AWS SAM
<a name="serverless-sam-cli-using-build-typescript"></a>

若要建置和封裝 Node.js AWS Lambda 函數，您可以使用 AWS SAM CLI搭配 esbuild JavaScript bundler。esbuild bundler 支援您在 TypeScript 中寫入的 Lambda 函數。

若要使用 esbuild 建置 Node.js Lambda 函數，請將`Metadata`物件新增至您的`AWS:Serverless::Function`資源，並為 指定 `esbuild` `BuildMethod`。當您執行 **sam build**命令時， AWS SAM 會使用 esbuild 來綁定 Lambda 函數程式碼。

## 中繼資料屬性
<a name="serverless-sam-cli-using-build-typescript-metadata"></a>

`Metadata` 物件支援 esbuild 的下列屬性。

### BuildMethod
<a name="serverless-sam-cli-using-build-typescript-metadata-buildmethod"></a>

為您的應用程式指定 Bundler。唯一支援的值為 `esbuild`。

### BuildProperties
<a name="serverless-sam-cli-using-build-typescript-metadata-buildproperties"></a>

指定 Lambda 函數程式碼的建置屬性。

`BuildProperties` 物件支援 esbuild 的下列屬性。所有屬性都是選用的。根據預設， AWS SAM 會將 Lambda 函數處理常式用於進入點。

**EntryPoints**  
為您的應用程式指定進入點。

**外部**  
指定要從建置中省略的套件清單。如需詳細資訊，請參閱 *esbuild 網站的*[外部](https://esbuild.github.io/api/#external)。

**格式**  
指定應用程式中產生的 JavaScript 檔案的輸出格式。如需詳細資訊，請參閱 *esbuild 網站上的*[格式化](https://esbuild.github.io/api/#format)。

**載入器**  
指定用於載入指定檔案類型之資料的組態清單。

**MainFields**  
指定解析套件時要嘗試匯入`package.json`的欄位。預設值為 `main,module`。

**Minify**  
指定是否將綁定的輸出程式碼縮小。預設值為 `true`。

**OutExtension**  
自訂 esbuild 產生的檔案副檔名。如需詳細資訊，請參閱 *esbuild 網站上的* [Out 擴充](https://esbuild.github.io/api/#out-extension)功能。

**來源映射**  
指定 Bundler 是否產生來源映射檔案。預設值為 `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 網站上的*[來源內容](https://esbuild.github.io/api/#sources-content)。

**Target**  
指定目標 ECMAScript 版本。預設值為 `es2020`。

## TypeScript Lambda 函數範例
<a name="serverless-sam-cli-using-build-typescript-example"></a>

下列範例 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>"
```