

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

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

# npm 标签处理
<a name="packages-npm-tags"></a>

npm 注册表支持*标签*，这些标签是程序包版本的字符串别名。您可以使用标签来提供别名而不是使用版本号。例如，您有一个包含多个开发流的项目，并且为每个流使用不同的标签（例如 `stable`、`beta`、`dev`、`canary`）。有关更多信息，请参阅 *npm Docs* 上的 [dist-tag](https://docs.npmjs.com/cli/dist-tag)。

默认情况下，npm 使用 `latest` 标签来标识程序包的当前版本。`npm install {{pkg}}`（不带 `@{{version}}` 或 `@{{tag}}` 说明符）会安装最新的标签。通常，项目仅对稳定发行版使用最新标签。对于不稳定版本或预发行版本使用其他标签。

## 使用 npm 客户端编辑标签
<a name="editing-tags-with-the-npm-client"></a>

 这三个`npm dist-tag`命令（`add``rm`、和`ls`）在 CodeCatalyst 软件包存储库中的功能与它们在[默认 npm 注册表](https://registry.npmjs.com/)中的功能相同。

## npm 标签和上游存储库
<a name="packages-tags-and-upstreams"></a>

当`npm`请求某个软件包的标签以及该软件包的版本也存在于上游存储库中时，会先 CodeCatalyst 合并这些标签，然后再将其返回给客户端。例如，名为 `R` 的存储库有一个名为 `U` 的上游存储库。下表显示了两个存储库中都存在的名为 `web-helper` 的程序包的标签。


****  

| Repository | 程序包名称 | 程序包标签 | 
| --- | --- | --- | 
| R | `web-helper` |  *最新*（版本 1.0.0 的别名） | 
| U | `web-helper` |  *alpha*（版本 1.0.1 的别名） | 

在这种情况下，当 npm 客户端从存储库 `R` 获取 `web-helper` 程序包的标签时，它会同时收到*最新*标签和 *alpha* 标签。标签指向的版本不会改变。

如果上游和本地存储库中的同一个软件包上都存在相同的标签，则 CodeCatalyst 使用上*次更新的*标签。例如，假设 *webhelper* 上的标签已修改为如下所示。


****  

| Repository | 程序包名称 | 程序包标签 | 上次更新时间 | 
| --- | --- | --- | --- | 
| R | `web-helper` |  *最新*（版本 1.0.0 的别名） | 2023 年 1 月 1 日 | 
| U | `web-helper` |  *最新*（版本 1.0.1 的别名） | 2023 年 6 月 1 日 | 

在这种情况下，当 npm 客户端从存储库 `R` 提取程序包 *web-helper* 的标签时，*最新*标签将作为版本 *1.0.1* 的别名，因为它上次已进行更新。这样就可以运行 `npm update`，在上游存储库中更轻松地使用尚不存在于本地存储库中的新程序包版本。