

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

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

# 向蓝图添加存储库和源代码组件
<a name="comp-repo-source-bp"></a>

Amazon CodeCatalyst 使用存储库来存储代码。存储库将名称用作输入。大多数组件都存储在存储库中，例如源代码文件、工作流和其他组件，例如托管式开发环境（MDE）。源存储库组件还导出用于管理文件和静态资产的各种组件。存储库有名称限制。有关更多信息，请参阅 [使用源存储库存储代码并协作处理代码 CodeCatalyst使用源存储库存储代码并进行协作](source.md)。

```
const repository = new SourceRepository(this, {
  title: 'my-new-repository-title',
});
```

**导入 Amazon CodeCatalyst 蓝图存储库和源代码组件**

在您的 `blueprint.ts` 文件中，添加以下内容：

```
import {...} from '@caws-blueprint-component/caws-source-repositories'
```

**Topics**
+ [添加文件](#repo-add-file-bp)
+ [添加通用文件](#repo-add-generic-file-bp)
+ [复制文件](#repo-copy-file-bp)
+ [定位多个文件](#target-multiple-files-bp)
+ [创建新的存储库并添加文件](#repo-code-examples-bp)

## 添加文件
<a name="repo-add-file-bp"></a>

您可以使用 `SourceFile` 构造，将文本文件写入到存储库中。该操作是最常见的应用场景之一，需要使用存储库、文件路径和文本内容。如果存储库中不存在文件路径，则该组件会创建所有必需的文件夹。

```
new SourceFile(repository, `path/to/my/file/in/repo/file.txt`, 'my file contents');
```

**注意**  
如果您将两个文件写入到同一存储库中的相同位置，则最新的实施会覆盖前一个实施。您可以使用该功能对生成的代码进行分层，这对于扩展自定义蓝图可能已生成的代码尤其有用。

## 添加通用文件
<a name="repo-add-generic-file-bp"></a>

您可以向自己的存储库中写入任意位。您可以从缓冲区读取并使用 `File` 构造。

```
new File(repository, `path/to/my/file/in/repo/file.img`, new Buffer(...));

new File(repository, `path/to/my/file/in/repo/new-img.img`, new StaticAsset('path/to/image.png').content());
```

## 复制文件
<a name="repo-copy-file-bp"></a>

您可以复制粘贴起始代码，然后在这个基础上生成更多代码，从而开始使用生成的代码。将代码放在 `static-assets` 目录中，然后使用 `StaticAsset` 构造来定位该代码。在这种情况下，路径始终从 `static-assets` 目录的根目录开始。

```
const starterCode = new StaticAsset('path/to/file/file.txt')
const starterCodeText = new StaticAsset('path/to/file/file.txt').toString()
const starterCodeRawContent = new StaticAsset('path/to/image/hello.png').content()

const starterCodePath = new StaticAsset('path/to/image/hello.png').path()
// starterCodePath is equal to 'path/to/image/hello.png'
```

`StaticAsset` 的子类是 `SubstitutionAsset`。子类的功能完全相同，不过您可以改为对文件执行 Mustache 替换。这对于执行复制和替换样式生成非常有用。

静态资产替换使用 Mustache 模板引擎来呈现植入到所生成的源存储库中的静态文件。Mustache 模板规则是在呈现期间应用的，这意味着默认情况下，所有值都是 HTML 编码值。要呈现未转义的 HTML，请使用三个花括号语法 `{{{name}}}`。有关更多信息，请参阅 [mustache templating rules](https://github.com/janl/mustache.js?tab=readme-ov-file#variables)。

**注意**  
对无法使用文本解释的文件运行替换操作时，可能会产生错误。

```
const starterCodeText = new SubstitionAsset('path/to/file/file.txt').subsitite({
  'my_variable': 'subbed value1',
  'another_variable': 'subbed value2'
})
```

## 定位多个文件
<a name="target-multiple-files-bp"></a>

静态资源支持通过 `StaticAsset` 上的静态函数以及名为 `findAll(...)` 的子类，来进行 glob 定位，这将返回已预加载路径、内容等的静态资源列表。您可以将列表与 `File` 结构链接起来，以便在 `static-assets` 目录中复制和粘贴内容。

```
new File(repository, `path/to/my/file/in/repo/file.img`, new Buffer(...));

new File(repository, `path/to/my/file/in/repo/new-img.img`, new StaticAsset('path/to/image.png').content());
```

## 创建新的存储库并添加文件
<a name="repo-code-examples-bp"></a>

您可以使用存储库组件，在生成的项目中创建新的存储库。然后，您可以将文件或工作流添加到创建的存储库中。

```
import { SourceRepository } from '@amazon-codecatalyst/codecatalyst-source-repositories';
...
const repository = new SourceRepository(this, { title: 'myRepo' });
```

以下示例说明如何向现有存储库添加文件和工作流：

```
import { SourceFile } from '@amazon-codecatalyst/codecatalyst-source-repositories';
import { Workflow } from '@amazon-codecatalyst/codecatalyst-workflows';
...
new SourceFile(repository, 'README.md', 'This is the content of my readme');
new Workflow(this, repository, {/**...workflowDefinition...**/});
```

将这两段代码组合在一起时，可以生成单个名为 `myRepo` 的存储库，其根目录中包含一个源文件 `README.md` 和一个 CodeCatalyst 工作流。