

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

# 編輯建置規格
<a name="edit-build-settings"></a>

您可以在 Amplify 主控台中編輯建置規格 (buildspec)，以自訂應用程式的建置設定。建置設定會套用至您應用程式中的所有分支，但 Git 儲存庫中儲存了 `amplify.yml` 檔案的分支除外。

**在 Amplify 主控台中編輯建置設定**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇您要編輯建置設定的應用程式。

1. 在導覽窗格中，選擇**託管**，然後選擇**建置設定**。

1. 在**建置設定**頁面**的應用程式建置規格**區段中，選擇**編輯**。

1. 在**編輯建置規格**視窗中，輸入您的更新。

1. 選擇**儲存**。

您可以使用下列主題中所述的範例來更新特定案例的建置設定。

**Topics**
+ [使用指令碼設定分支特定的建置設定](#branch-specific-build-settings)
+ [設定命令以導覽至子資料夾](#navigating-to-a-subfolder)
+ [使用 Gen 1 應用程式的前端部署後端](#frontend-with-backend)
+ [設定輸出資料夾](#setting-the-output-folder)
+ [在組建中安裝套件](#installing-packages-as-part-of-your-build)
+ [使用私有 npm 登錄檔](#using-a-private-npm-registry)
+ [安裝 OS 套件](#installing-os-packages)
+ [為每個組建設定鍵值儲存](#key-value-storage-for-every-build)
+ [略過遞交的建置](#skip-build-for-a-commit)
+ [關閉每個遞交上的自動建置](#disable-automatic-builds)
+ [設定以差異為基礎的前端建置和部署](#enable-diff-deploy)
+ [為 Gen 1 應用程式設定差異型後端建置](#enable-diff-backend)

## 使用指令碼設定分支特定的建置設定
<a name="branch-specific-build-settings"></a>

您可以使用 bash shell 指令碼來配置分支特定的建置設定。例如，下列指令碼使用系統環境變數 *$AWS\_BRANCH*，在分支名稱為*主要*時執行一組命令，而在分支名稱為*開發*時執行另一組命令。

```
frontend:
  phases:
    build:
      commands:
        - if [ "${AWS_BRANCH}" = "main" ]; then echo "main branch"; fi
        - if [ "${AWS_BRANCH}" = "dev" ]; then echo "dev branch"; fi
```

## 設定命令以導覽至子資料夾
<a name="navigating-to-a-subfolder"></a>

對於 monorepos，使用者希望能夠在`cd`資料夾中執行建置。執行 `cd`命令後，它會套用至建置的所有階段，因此您不需要分階段重複執行命令。

```
version: 1
env:
  variables:
    key: value
frontend:
  phases:
    preBuild:
      commands:
        - cd react-app
        - npm ci
    build:
      commands:
        - npm run build
```

## 使用 Gen 1 應用程式的前端部署後端
<a name="frontend-with-backend"></a>

**注意**  
本節僅適用於 Amplify Gen 1 應用程式。第 1 代後端是使用 Amplify Studio 和 Amplify 命令列界面 (CLI) 建立。

`amplifyPush` 命令是一種協助程式指令碼，可協助您進行後端部署。下面的建置設定會自動判斷要為目前分支部署的正確後端環境。

```
version: 1
env:
  variables:
    key: value
backend:
  phases:
    build:
      commands:
        - amplifyPush --simple
```

## 設定輸出資料夾
<a name="setting-the-output-folder"></a>

以下建置設定會將輸出目錄設定為公有資料夾。

```
frontend:
  phases:
    commands:
      build:
        - yarn run build
  artifacts:
    baseDirectory: public
```

## 在組建中安裝套件
<a name="installing-packages-as-part-of-your-build"></a>

您可以使用 `npm`或 `yarn`命令在建置期間安裝套件。

```
frontend:
  phases:
    build:
      commands:
        - npm install -g <package>
        - <package> deploy
        - yarn run build
  artifacts:
    baseDirectory: public
```

## 使用私有 npm 登錄檔
<a name="using-a-private-npm-registry"></a>

您可以新增對您的建置設定中私有登錄的參考，或將它新增為環境變數。

```
build:
  phases:
    preBuild:
      commands:
        - npm config set <key> <value>
        - npm config set registry https://registry.npmjs.org
        - npm config set always-auth true
        - npm config set email hello@amplifyapp.com
        - yarn install
```

## 安裝 OS 套件
<a name="installing-os-packages"></a>

Amplify 的 AL2023 映像會使用名為 的非特殊權限使用者來執行您的程式碼`amplify`。Amplify 授予此使用者使用 Linux 命令執行作業系統`sudo`命令的權限。如果您想要為缺少的相依性安裝作業系統套件，您可以使用 和 等命令`yum``rpm`搭配 `sudo`。

下列範例建置區段示範使用 `sudo`命令安裝作業系統套件的語法。

```
build:
  phases:
    preBuild:
      commands:
        - sudo yum install -y <package>
```

## 為每個組建設定鍵值儲存
<a name="key-value-storage-for-every-build"></a>

會在建置時`envCache`提供鍵值儲存。儲存在 中的值`envCache`只能在建置期間修改，並可在下一次建置時重複使用。使用 `envCache`，我們可以將資訊存放在已部署的環境上，並連續提供建置容器使用。與存放在 中的值不同`envCache`，在建置期間的環境變數變更不會保留到未來的建置。

使用範例：

```
envCache --set <key> <value>
envCache --get <key>
```

## 略過遞交的建置
<a name="skip-build-for-a-commit"></a>

若要略過特定遞交的自動建置，請在遞交訊息結尾加入文字 **【skip-cd】**。

## 關閉每個遞交上的自動建置
<a name="disable-automatic-builds"></a>

您可以設定 Amplify 來關閉每個程式碼遞交的自動建置。若要設定，請選擇**應用程式設定**、**分支設定**，然後尋找列出已連接分支的**分支**區段。選取分支，然後選擇**動作**、**停用自動建置**。對該分支的新遞交將不再啟動新的組建。

## 設定以差異為基礎的前端建置和部署
<a name="enable-diff-deploy"></a>

您可以設定 Amplify 使用 diff 型前端建置。如果啟用，在每個組建開始時，Amplify 會嘗試在您的 `appRoot`或 `/src/` 資料夾上執行 diff。如果 Amplify 找不到任何差異，它會略過前端建置、測試 （如果已設定） 和部署步驟，而且不會更新您的託管應用程式。

**設定以 diff 為基礎的前端建置和部署**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要設定 diff 型前端建置和部署的應用程式。

1. 在導覽窗格中，選擇**託管**、**環境變數**。

1. 在**環境變數**區段中，選擇**管理變數**。

1. 設定環境變數的程序會根據您是否啟用或停用以差異為基礎的前端建置和部署而有所不同。
   + 啟用 diff 型前端建置和部署

     1. 在**管理變數**區段的**變數**下，輸入 `AMPLIFY_DIFF_DEPLOY`。

     1. 針對**數值**，輸入 `true`。
   + 停用以 diff 為基礎的前端建置和部署

     1. 執行以下任意一項：
       + 在**管理變數**區段中，找到 `AMPLIFY_DIFF_DEPLOY`。針對**數值**，輸入 `false`。
       + 移除`AMPLIFY_DIFF_DEPLOY`環境變數。

1. 選擇**儲存**。

或者，您可以設定`AMPLIFY_DIFF_DEPLOY_ROOT`環境變數，以相對於儲存庫根目錄的路徑覆寫預設路徑，例如 `dist`。

## 為 Gen 1 應用程式設定差異型後端建置
<a name="enable-diff-backend"></a>

**注意**  
本節僅適用於 Amplify Gen 1 應用程式。第 1 代後端是使用 Amplify Studio 和 Amplify 命令列界面 (CLI) 建立。

您可以使用 `AMPLIFY_DIFF_BACKEND`環境變數，將 Amplify 託管設定為使用 diff 型後端建置。當您啟用 diff 型後端建置時，在每個建置開始時，Amplify 會嘗試在儲存庫中的`amplify`資料夾上執行 diff。如果 Amplify 找不到任何差異，它會略過後端建置步驟，而不會更新您的後端資源。如果您的專案在儲存庫中沒有 `amplify` 資料夾，Amplify 會忽略`AMPLIFY_DIFF_BACKEND`環境變數的值。

如果您目前在後端階段的建置設定中指定了自訂命令，則條件式後端建置將無法運作。如果您希望這些自訂命令執行，則必須將其移至您應用程式`amplify.yml`檔案中建置設定的前端階段。

**設定 diff 型後端建置**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要設定 diff 型後端建置的應用程式。

1. 在導覽窗格中，選擇**託管**、**環境變數**。

1. 在**環境變數**區段中，選擇**管理變數**。

1. 環境變數的設定程序會因您是否啟用或停用 diff 型後端建置而有所不同。
   + 啟用 diff 型後端建置

     1. 在**管理變數**區段的**變數**下，輸入 `AMPLIFY_DIFF_BACKEND`。

     1. 針對**數值**，輸入 `true`。
   + 停用 diff 型後端建置

     1. 執行以下任意一項：
       + 在**管理變數**區段中，找到 `AMPLIFY_DIFF_BACKEND`。針對**數值**，輸入 `false`。
       + 移除`AMPLIFY_DIFF_BACKEND`環境變數。

1. 選擇**儲存**。