

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

# 构建规范参考
<a name="yml-specification-syntax"></a>

Amplify 应用程序的构建规范（buildspec）是 Amplify 用来运行构建的 YAML 设置和构建命令集合。下表描述了这些设置及其使用方式。

**版本**  
Amplify YAML 版本号。

**appRoot**  
此应用程序所在存储库中的路径。*除非定义了多个应用程序，否则忽略。*

**env**  
向此部分中添加环境变量。您还可以使用控制台添加环境变量。

**后端**  
在持续部署过程中，运行 Amplify CLI 命令来预置后端、更新 Lambda 函数或 GraphQL 架构。

**frontend**  
运行前端构建命令。

**测试**  
在测试阶段运行命令。了解如何[为应用程序添加测试](running-tests.md)。

**构建阶段**  
前端和后端都具有三个*阶段*，表示在每个构建序列中运行的命令。  
+  **preBuild**：预构建脚本在实际构建启动之前、Amplify 安装依赖项之后运行。
+  **build** – 您的构建命令。
+  **postBuild** – 构建后脚本在构建已完成并且 Amplify 已将所有必要项目都复制到输出目录后运行。

**buildpath**  
用于运行构建程序的路径。Amplify 使用此路径来查找您的构建构件。如果您没有指定路径，Amplify 会使用单一存储库应用程序根目录，例如 `apps/app`。

**artifacts>base-directory**  
您的构建构建所位于的目录。

**artifacts>files**  
指定要部署的构件中的文件。输入 `**/*` 以包含所有文件。

**cache**  
指定构建时的依赖项，例如 *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*
```