

亚马逊 CodeCatalyst 不再向新买家开放。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [如何从中迁移 CodeCatalyst](migration.md)。

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

# 自定义蓝图概念
<a name="custom-bp-concepts"></a>

以下是您在 CodeCatalyst 中使用自定义蓝图时需要了解的一些概念和术语。

**Topics**
+ [蓝图项目](#blueprint-project-concept)
+ [空间蓝图](#space-blueprints-concept)
+ [空间蓝图目录](#blueprint-catalog-concept)
+ [合成](#synthesis-concept)
+ [重新合成](#resynthesis-concept)
+ [部分选项](#partial-options-concept)
+ [Projen](#projen-concept)

## 蓝图项目
<a name="blueprint-project-concept"></a>

利用蓝图项目，可以开发蓝图并将其发布到您的空间。源存储库是在项目创建过程中创建的，存储库的名称是您在输入**项目资源**详细信息时选择的名称。在蓝图创建过程中，如果您选择生成工作流版本，则会在蓝图中使用**蓝图生成器**蓝图创建发布工作流。该工作流会自动发布您的最新版本。

## 空间蓝图
<a name="space-blueprints-concept"></a>

导航到空间的**蓝图**部分时，您可以查看和管理**空间蓝图**表中的所有蓝图。在将蓝图发布到您的空间后，它们将作为空间蓝图提供，以便您能够在空间的蓝图目录中添加和移除它们。您还可以在空间的**蓝图**部分中管理发布权限和删除蓝图。有关更多信息，请参阅 [查看自定义蓝图的详细信息、版本和项目](view-bp.md)。

## 空间蓝图目录
<a name="blueprint-catalog-concept"></a>

您可以在空间的蓝图目录中查看所有已添加的自定义蓝图。在此处，空间成员可以选择您的自定义蓝图来创建新项目。该目录与 CodeCatalyst 目录不同，后者包含对所有空间成员可用的蓝图。有关更多信息，请参阅 [使用 CodeCatalyst 蓝图创建综合项目使用蓝图创建综合项目](project-blueprints.md)。

## 合成
<a name="synthesis-concept"></a>

合成是生成 CodeCatalyst 项目捆绑包的过程，该捆绑包代表项目中的源代码、配置和资源。之后，CodeCatalyst 部署 API 操作将使用该捆绑包以部署到项目中。该过程可以在开发自定义蓝图时在本地运行，以模拟项目创建过程，而无需在 CodeCatalyst 中创建项目。以下命令可用于执行合成：

```
yarn blueprint:synth             # fast mode
yarn blueprint:synth --cache     # wizard emulation mode
```

蓝图首先在 `defaults.json` 合并了该选项的情况下调用主 `blueprint.ts` 类。在 `synth/synth.[options-name]/proposed-bundle/` 文件夹下将生成一个新的项目捆绑包。输出包括自定义蓝图根据您设置的选项生成的项目捆绑包，包括您可能已配置的[部分选项](#partial-options-concept)。

## 重新合成
<a name="resynthesis-concept"></a>

重新合成是使用不同的蓝图选项或现有项目的蓝图版本重新生成蓝图的过程。作为蓝图作者，您可以在自定义蓝图代码中定义自定义合并策略。您还可以在 `.ownership-file` 中定义所有权边界，以便指定允许在代码库的哪些部分更新蓝图。自定义蓝图可以建议对 `.ownership-file` 的更新，而使用自定义蓝图的项目开发人员可以确定其项目的所有权边界。您可以在本地运行重新合成，并在发布自定义蓝图之前进行测试和更新。使用以下命令可执行重新合成：

```
yarn blueprint:resynth             # fast mode
yarn blueprint:resynth --cache     # wizard emulation mode
```

蓝图首先在 `defaults.json` 合并了该选项的情况下调用主 `blueprint.ts` 类。在 `synth/resynth.[options-name]/` 文件夹下将生成一个新的项目捆绑包。输出包括自定义蓝图根据您设置的选项生成的项目捆绑包，包括您可能已配置的[部分选项](#partial-options-concept)。

在合成和重新合成过程完成后将创建以下内容：
+ **proposed-bundle** – 使用目标蓝图版本的新选项运行合成时的输出。
+ **existing-bundle** – 对现有项目的模拟。如果此文件夹中没有任何内容，则生成此文件夹时的输出与 `proposed-bundle` 相同。
+ **ancestor-bundle** – 模拟使用先前版本和/或先前选项运行蓝图时生成的内容。如果此文件夹中没有任何内容，则生成此文件夹时的输出与 `proposed-bundle` 相同。
+ **resolved-bundle** – 始终会重新生成捆绑包，并且该捆绑包默认为 `proposed-bundle`、`existing-bundle` 和 `ancestor-bundle` 之间的三向合并。此捆绑包提供了重新合成将在本地输出的内容的模拟。

要了解有关蓝图输出捆绑包的更多信息，请参阅[使用重新合成功能生成文件](merge-strategies-lm.md#three-way-merge-lm)。

## 部分选项
<a name="partial-options-concept"></a>

您可以在 `src/wizard-configuration/` 下添加选项变体，这些变体不必枚举整个 `Options` 接口，而且这些选项会在 `defaults.json` 文件的顶部合并。这可让您跨特定选项定制测试案例。

**示例：**

`Options` 接口：

```
{
  language: "Python" | "Java" | "Typescript",
  repositoryName: string
  ...
}
```

`defaults.json` 文件：

```
{
  language: "Python",
  repositoryName: "Myrepo"
  ...
}
```

其他配置测试：
+ 

  ```
  #wizard-config-typescript-test.json
  {
    language: "Typescript",
  }
  ```
+ 

  ```
  #wizard-config-java-test.json
  {
    language: "Java",
  }
  ```

## Projen
<a name="projen-concept"></a>

Projen 是一款开源工具，可供自定义蓝图用来保持最新状态和一致性。蓝图采用 Projen 程序包形式，因为此框架可让您构建、捆绑和发布项目，并且您可以使用该接口来管理项目的配置和设置。

即使在创建蓝图后，也可以使用 Projen 大规模更新蓝图。Projen 工具是生成项目捆绑包的蓝图合成背后的底层技术。Projen 拥有项目的配置，它不会影响您作为蓝图作者执行的操作。您可以在添加依赖项后运行 `yarn projen` 以重新生成项目配置，也可以更改 `projenrc.ts` 文件中的选项。Projen 还是用于合成项目的自定义蓝图的底层生成工具。有关更多信息，请参阅 [projen GitHub 页](https://github.com/projen/projen)。要了解有关如何使用 Projen 的更多信息，请参阅 [Projen 文档](http://projen.io/)。