

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

# 在 CodeArtifact 中配置和使用 Yarn
<a name="npm-yarn"></a>

创建存储库后，您可以使用 Yarn 客户端来管理 npm 程序包。

**注意**  
`Yarn 1.X` 会读取和使用 npm 配置文件 (.npmrc) 中的信息，但 `Yarn 2.X` 不会。`Yarn 2.X` 的配置必须在.yarnrc.yml 文件中定义。

**Contents**
+ [使用 `aws codeartifact login` 命令配置 Yarn 1.X](#npm-yarn-configure-login)
+ [使用 `yarn config set` 命令配置 Yarn 2.X](#npm-yarn-configure-yarn-command)

## 使用 `aws codeartifact login` 命令配置 Yarn 1.X
<a name="npm-yarn-configure-login"></a>

对于 `Yarn 1.X`，您可以使用 `aws codeartifact login` 命令在 CodeArtifact 中配置 Yarn。`login` 命令将使用您的 CodeArtifact 存储库端点信息和凭证配置 \~/.npmrc 文件。在 `Yarn 1.X` 中，`yarn` 命令使用 \~/.npmrc 文件中的配置信息。

**使用 login 命令配置 `Yarn 1.X`**

1. 如果尚未配置要与 AWS CLI 一起使用的 AWS 凭证，请先配置凭证，如[开始使用 CodeArtifact](getting-started.md) 中所述。

1. 要成功运行 `aws codeartifact login` 命令，必须安装 npm。有关安装说明，请参阅 *npm 文档*中的[下载和安装 Node.js 和 npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/)。

1. 使用 `aws codeartifact login` 命令提取 CodeArtifact 凭证并配置您的 \~/.npmrc 文件。
   + 将 {{my\_domain}} 替换为您的 CodeArtifact 域名。
   + 将 {{111122223333}} 替换为域所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [跨账户域](domain-overview.md#domain-overview-cross-account)。
   + 将 {{my\_repo}} 替换为您的 CodeArtifact 存储库名称。

   ```
   aws codeartifact login --tool npm --domain {{my_domain}} --domain-owner {{111122223333}} --repository {{my_repo}}
   ```

   `login` 命令对 \~/.npmrc 文件进行以下更改：
   + 使用 AWS 凭证从 CodeArtifact 获取授权令牌后添加授权令牌。
   + 将 npm 注册表设置为通过 `--repository` 选项指定的存储库。
   + **对于 npm 6 及更低版本：**添加 `"always-auth=true"`，为每个 npm 命令发送授权令牌。

   调用 `login` 后的默认授权期为 12 小时，且必须调用 `login` 来定期刷新令牌。有关使用 `login` 命令创建的授权令牌的更多信息，请参阅 [使用 `login` 命令创建的令牌](tokens-authentication.md#auth-token-login)。

1. **对于 npm 7.X 和 8.X**，必须将 `always-auth=true` 添加到 \~/.npmrc 文件中才能使用 Yarn。

   1. 在文本编辑器中打开 \~/.npmrc 文件并在新行中添加 `always-auth=true`。

您可以使用 `yarn config list` 命令来检查 Yarn 是否使用了正确的配置。运行命令后，请检查 `info npm config` 部分中的值。其内容看起来类似于以下代码段。

```
info npm config
{
  registry: 'https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/',
  '//my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:_authToken': 'eyJ2ZXI...',
  'always-auth': true
}
```

## 使用 `yarn config set` 命令配置 Yarn 2.X
<a name="npm-yarn-configure-yarn-command"></a>

以下程序详细说明了如何使用 `yarn config set` 命令从命令行更新 `.yarnrc.yml` 配置，从而配置 `Yarn 2.X`。

**从命令行更新 `yarnrc.yml` 配置**

1. 如果尚未配置要与 AWS CLI 一起使用的 AWS 凭证，请先配置凭证，如[开始使用 CodeArtifact](getting-started.md) 中所述。

1. 使用 `aws codeartifact get-repository-endpoint` 命令来获取 CodeArtifact 存储库的端点。
   + 将 {{my\_domain}} 替换为您的 CodeArtifact 域名。
   + 将 {{111122223333}} 替换为域所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [跨账户域](domain-overview.md#domain-overview-cross-account)。
   + 将 {{my\_repo}} 替换为您的 CodeArtifact 存储库名称。

   ```
   aws codeartifact get-repository-endpoint --domain {{my_domain}} --domain-owner {{111122223333}} --repository {{my_repo}} --format npm
   ```

1. 使用存储库端点更新 .yarnrc.yml 文件中的 `npmRegistryServer` 值。

   ```
   yarn config set npmRegistryServer "https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{region}}.amazonaws.com/npm/{{my_repo}}/"
   ```

1. 提取 CodeArtifact 授权令牌并将其存储在环境变量中。
**注意**  
以下命令适用于 macOS 或 Linux 计算机。有关在 Windows 计算机上配置环境变量的信息，请参阅[使用环境变量传递身份验证令牌](tokens-authentication.md#env-var)。
   + 将 {{my\_domain}} 替换为您的 CodeArtifact 域名。
   + 将 {{111122223333}} 替换为域所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [跨账户域](domain-overview.md#domain-overview-cross-account)。
   + 将 {{my\_repo}} 替换为您的 CodeArtifact 存储库名称。

   ```
   export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token --domain {{my_domain}} --domain-owner {{111122223333}} --query authorizationToken --output text`
   ```

1. 使用 `yarn config set` 命令将 CodeArtifact 身份验证令牌添加到 .yarnrc.yml 文件中。将以下命令中的 URL 替换为步骤 2 中的存储库端点 URL。

   ```
   yarn config set 'npmRegistries["https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{region}}.amazonaws.com/npm/{{my_repo}}/"].npmAuthToken' "${CODEARTIFACT_AUTH_TOKEN}"
   ```

1. 使用 `yarn config set` 命令将 `npmAlwaysAuth` 的值设置为 `true`。将以下命令中的 URL 替换为步骤 2 中的存储库端点 URL。

   ```
   yarn config set 'npmRegistries["https://{{my_domain}}-{{111122223333}}.d.codeartifact.{{region}}.amazonaws.com/npm/{{my_repo}}/"].npmAlwaysAuth' "true"
   ```

配置完成后，.yarnrc.yml 配置文件的内容应与以下代码段类似。

```
npmRegistries:
  "https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/":
    npmAlwaysAuth: true
    npmAuthToken: eyJ2ZXI...

npmRegistryServer: "https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/"
```

您也可以使用 `yarn config` 命令来检查 `npmRegistries` 和 `npmRegistryServer` 的值。