

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

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

# 程序包概念
<a name="packages-concepts"></a>

以下是管理、发布或使用中的软件包时需要了解的一些概念和术语 CodeCatalyst。

## 软件包
<a name="packages-concepts-packages"></a>

软件*包*是一个包含安装软件和解决任何依赖关系所需的软件和元数据的捆绑包。 CodeCatalyst 支持 npm 包格式。

程序包中包括：
+ 一个名称（例如，`webpack` 是一个流行的 npm 程序包的名称）
+ 一个可选的[命名空间](#packages-concepts-package-namespaces)（例如，`@types/node` 中的 `@types`）
+ 一组[版本](#packages-concepts-package-versions)（例如，`1.0.0`、`1.0.1`、`1.0.2`）
+ 程序包级别的元数据（例如 npm dist 标签）

## 程序包命名空间
<a name="packages-concepts-package-namespaces"></a>

某些程序包格式支持分层程序包名称，用于将程序包组织成逻辑组，有助于避免名称冲突。具有相同名称的程序包可以存储在不同的命名空间中。例如，npm 支持作用域，而 npm 程序包 `@types/node` 的作用域为 `@types`，名称为 `node`。`@types` 作用域中还有许多其他的程序包名称。在中 CodeCatalyst，作用域（“类型”）被称为包命名空间，名称（“节点”）被称为包名称。对于 Maven 程序包，程序包命名空间与 Maven GroupId 相对应。Maven 程序包 `org.apache.logging.log4j:log4j` 的 groupID（程序包命名空间）为 `org.apache.logging.log4j`，artifactID（程序包名称）为 `log4j`。某些程序包格式（例如 Python）不支持其概念类似于 npm 作用域或 Maven groupID 的分层名称。如果无法对程序包名称进行分组，则可能更难避免名称冲突。

## 程序包版本
<a name="packages-concepts-package-versions"></a>

*程序包版本*标识程序包的特定版本，例如 `@types/node@12.6.9`。版本号格式和语义因不同的程序包格式而异。例如，npm 程序包版本必须符合[语义版本控制规范](https://semver.org/)。在中 CodeCatalyst，软件包版本由版本标识符、 package-version-level元数据和一组资源组成。

## 资产
<a name="packages-concepts-assets"></a>

*资产*是存储在中与软件包版本关联 CodeCatalyst 的单个文件，例如 npm `.tgz` 文件或 Maven POM 或 JAR 文件。

## 程序包存储库
<a name="packages-concepts-repository"></a>

 CodeCatalyst *包存储库*包含一组[包](#packages-concepts-packages)，其中包含软件[包版本](#packages-concepts-package-versions)，每个版本都映射到一组[资产](#packages-concepts-assets)。程序包存储库是多语言的，这意味着单个存储库可以包含任何受支持类型的程序包。每个包存储库都公开端点，用于使用 (、)、CLI `nuget`、Maven CL `npm` I NuGet CLIs (`dotnet`) 和 Pyth CLIs on `mvn``pip`（`twine`和）等工具获取和发布包。有关中的 CodeCatalyst软件包配额（包括在每个空间中可以创建多少个软件包存储库）的信息，请参阅[程序包配额](packages-quotas.md)。

您可以通过将一个程序包存储库设置为上游来将它链接到另一个程序包存储库。在将存储库设置为上游时，可以使用来自该上游的任何程序包以及链中的任何其他上游存储库。有关更多信息，请参阅 [上游存储库](#packages-concepts-upstream-repositories)。

网关存储库是一种特殊类型的程序包存储库，用于从官方外部程序包授权机构处拉取和存储程序包。有关更多信息，请参阅 [网关存储库](#packages-concepts-gateway-repositories)。

## 上游存储库
<a name="packages-concepts-upstream-repositories"></a>

您可以使用 CodeCatalyst 在两个软件包存储库之间创建上游关系。当可以从下游存储库的程序包存储库端点访问其中的程序包版本时，一个程序包存储库将为另一个程序包存储库的*上游*。利用上游关系，可从客户端的角度有效地合并两个程序包存储库的内容。

例如，如果软件包管理器请求存储库中不存在的软件包版本，则 CodeCatalyst 会在已配置的上游存储库中搜索该软件包的版本。按配置顺序搜索上游存储库，一旦找到软件包， CodeCatalyst 就会停止搜索。

## 网关存储库
<a name="packages-concepts-gateway-repositories"></a>

*网关存储库*是一种特殊类型的程序包存储库，它与支持的外部官方程序包授权机构相连。在将网关存储库添加为[上游存储库](#packages-concepts-upstream-repositories)时，可以从相应的官方程序包授权机构处使用程序包。您的下游存储库不与公有存储库进行通信，相反，所有内容都由网关存储库进行中继。通过此方式使用的程序包同时存储在网关存储库和收到原始请求的下游存储库中。

网关存储库是预定义的，但必须在要使用的每个项目中创建它们。以下列表包含可以在中创建的每个网关存储库 CodeCatalyst 以及它们所连接的包权限。
+ **npm-public-registry-gateway**提供来自 npmjs.com 的 npm 软件包。
+ **maven-central-gateway**提供来自 Maven Central 存储库的 Maven 软件包。
+ **google-android-gateway**提供来自谷歌安卓系统的 Maven 软件包。
+ **commonsware-gateway** 提供的 Maven CommonsWare
+ **gradle-plugins-gateway**提供来自 Gradle 插件的 Maven 软件包。
+ **nuget-gallery-gateway**提供 NuGet 图库中的 NuGet 软件包。
+ **pypi-gateway** 提供来自 Python 包索引的 Python 程序包。