

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

# 組建規格參考
<a name="yml-specification-syntax"></a>

Amplify 應用程式的建置規格 (buildspec) 是一組 YAML 設定和建置命令，供 Amplify 用來執行您的建置。下列清單說明這些設定及其使用方式。

**version**  
Amplify YAML 版本編號。

**appRoot**  
此應用程式所在儲存庫內的路徑。*除非定義多個應用程式，否則會忽略。*

**env**  
將環境變數新增至本節。您也可以使用主控台新增環境變數。

**後端**  
執行 Amplify CLI 命令來佈建後端、更新 Lambda 函數或 GraphQL 結構描述，作為持續部署的一部分。

**前端**  
執行前端建置命令。

**test**  
在測試階段期間執行命令。了解如何[將測試新增至您的應用程式](running-tests.md)。

**建置階段**  
前端、後端和測試有三個*階段*，代表建置的每個序列期間執行的命令。  
+  **preBuild** - preBuild 指令碼會在實際建置開始之前執行，但在 Amplify 安裝相依性之後執行。
+  **build** - 您的建置命令。
+  **postBuild** - 建置完成後執行建置後指令碼，且 Amplify 已將所有必要成品複製到輸出目錄。

**buildpath**  
用來執行建置的路徑。Amplify 使用此路徑來尋找您的建置成品。如果您未指定路徑，Amplify 會使用 monorepo 應用程式根，例如 `apps/app`。

**artifacts>base-directory**  
您建置成品所在的目錄。

**artifacts>files**  
從您要部署的成品中指定檔案。輸入 `**/*` 以包含所有檔案。

**快取**  
指定建置時間相依性，例如 *node\$1modules* 資料夾。在第一次建置期間，會快取此處提供的路徑。在後續建置中，Amplify 會在執行命令之前，將快取還原至相同的路徑。  
Amplify 會將所有提供的快取路徑視為與您的專案根目錄相對。不過，Amplify 不允許在專案根目錄之外周遊。例如，如果您指定絕對路徑，組建將會成功而沒有錯誤，但路徑不會快取。

## 組建規格 YAML 語法參考
<a name="build-yaml-syntax"></a>

下列組建規格範例示範基本 YAML 語法。

```
version: 1
env:
  variables:
    key: value
backend:
  phases:
    preBuild:
      commands:
        - *enter command*
    build:
      commands:
        - *enter command*
    postBuild:
        commands:
        - *enter command*
frontend:
  buildpath:
  phases:
    preBuild:
      commands:
        - cd react-app
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    files:
        - location
        - location
    discard-paths: yes
    baseDirectory: location
  cache:
    paths:
        - path # A cache path relative to the project root
        - path # Traversing outside of the project root is not allowed
test:
  phases:
    preTest:
      commands:
        - *enter command*
    test:
      commands:
        - *enter command*
    postTest:
      commands:
        - *enter command*
  artifacts:
    files:
        - location
        - location
    configFilePath: *location*
    baseDirectory: *location*
```