

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 编辑构建规范
<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)
+ [安装操作系统软件包](#installing-os-packages)
+ [为每个构建设置键值存储](#key-value-storage-for-every-build)
+ [为某个提交跳过构建](#skip-build-for-a-commit)
+ [关闭每次提交的自动构建](#disable-automatic-builds)
+ [配置基于 diff 的前端构建和部署](#enable-diff-deploy)
+ [为 Gen 1 应用程序配置基于 diff 的后端构建](#enable-diff-backend)

## 使用脚本设置特定于分支的构建设置
<a name="branch-specific-build-settings"></a>

您可以使用 bash shell 脚本设置特定于分支的构建设置。例如，如果分支名称为 *main*，则以下脚本使用系统环境变量 *$ AWS\_BRANCH* 运行一组命令；如果分支名称为 *dev*，则使用另一组命令。

```
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>

对于单一存储库，用户希望能够通过 `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 应用程序。Gen 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
```

## 安装操作系统软件包
<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，以停用在每次代码提交时自动构建。要进行设置，请选择**应用程序设置**、**分支设置**，然后找到列出所有已连接分支的**分支**部分。选择一个分支，然后选择**操作**、**禁用自动构建**。以该分支为目标的新提交操作将不再启动新的构建。

## 配置基于 diff 的前端构建和部署
<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 的前端构建和部署。
   + 启用基于 diff 的前端构建和部署

     1. 在**管理变量**部分，请在**变量**下输入 `AMPLIFY_DIFF_DEPLOY`。

     1. 对于**值**，请输入 `true`。
   + 禁用基于 diff 的前端构建和部署

     1. 请执行以下操作之一：
       + 在**管理变量**部分，找到 `AMPLIFY_DIFF_DEPLOY`。对于**值**，请输入 `false`。
       + 删除 `AMPLIFY_DIFF_DEPLOY` 环境变量。

1. 选择**保存**。

或者，您可以将环境变量 `AMPLIFY_DIFF_DEPLOY_ROOT` 设置为使用存储库根目录的相对路径来覆盖默认路径，例如 `dist`。

## 为 Gen 1 应用程序配置基于 diff 的后端构建
<a name="enable-diff-backend"></a>

**注意**  
此部分仅适用于 Amplify Gen 1 应用程序。Gen 1 后端使用 Amplify Studio 和 Amplify 命令行界面（CLI）创建。

您可以使用环境变量 `AMPLIFY_DIFF_BACKEND` 将 Amplify Hosting 配置为使用基于 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. 选择**保存**。