

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

# 配置并使用 npm CodeArtifact
<a name="npm-auth"></a>

在中创建存储库后 CodeArtifact，可以使用 npm 客户端安装和发布软件包。使用存储库端点和授权令牌配置 npm 的推荐方法是使用 `aws codeartifact login` 命令。也可以手动配置 npm。

**Contents**
+ [使用 login 命令配置 npm](#configure-npm-login-command)
+ [不使用 login 命令配置 npm](#configuring-npm-without-using-the-login-command)
+ [运行 npm 命令](#running-npm-commands)
+ [验证 npm 身份验证和授权](#verifying-npm-authentication-and-authorization)
+ [改回默认 npm 注册表](#revert-default-npm-registry)
+ [解决 npm 8.x 或更高版本中安装缓慢的问题](#troubleshooting-slow-npm-install)

## 使用 login 命令配置 npm
<a name="configure-npm-login-command"></a>

使用 `aws codeartifact login` 命令提取用于 npm 的凭证。

**注意**  
如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [跨账户域](domain-overview.md#domain-overview-cross-account)。

**重要**  
如果您使用的是 npm 10.x 或更高版本，则必须使用 2.9.5 或更高 AWS CLI 版本才能成功运行该命令。`aws codeartifact login`

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

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

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

## 不使用 login 命令配置 npm
<a name="configuring-npm-without-using-the-login-command"></a>

你可以通过手动更新 npm 配置，在不使用`aws codeartifact login`命令的情况下使用 CodeArtifact 存储库配置 npm。

**不使用 login 命令配置 npm**

1. 在命令行中，获取 CodeArtifact 授权令牌并将其存储在环境变量中。npm 将使用此令牌对您的存储库进行身份验证。 CodeArtifact 
**注意**  
以下命令适用于 macOS 或 Linux 计算机。有关在 Windows 计算机上配置环境变量的信息，请参阅[使用环境变量传递身份验证令牌](tokens-authentication.md#env-var)。

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

1. 运行以下命令获取 CodeArtifact 仓库的终端节点。您的存储库端点用于将 npm 指向您的存储库来安装或发布程序包。
   + *my\$1domain*用您的 CodeArtifact 域名替换。
   + *111122223333*替换为域名所有者的 AWS 账户 ID。如果您要访问您拥有的域中的存储库，则无需包括 `--domain-owner`。有关更多信息，请参阅 [跨账户域](domain-overview.md#domain-overview-cross-account)。
   + *my\$1repo*替换为您的 CodeArtifact 存储库名称。

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

   以下 URL 是一个示例存储库端点。

   ```
   https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/
   ```
**重要**  
注册 URL 必须以正斜杠 (/) 结尾。否则，您无法连接到存储库。

1. 使用`npm config set`命令为您的 CodeArtifact 存储库设置注册表。将 URL 替换为上一步中的存储库端点 URL。

   ```
   npm config set registry=https://my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/
   ```
**注意**  
要使用双堆栈端点，请使用 `codeartifact.region.on.aws` 端点。

1. 使用 `npm config set` 命令将您的授权令牌添加到 npm 配置。

   ```
   npm config set //my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/:_authToken=$CODEARTIFACT_AUTH_TOKEN
   ```

   **对于 npm 6 或更低版本：**要让 npm 始终将身份验证令牌传递给 CodeArtifact，即使对于`GET`请求也是如此，请将`always-auth`配置变量设置为。`npm config set`

   ```
   npm config set //my_domain-111122223333.d.codeartifact.region.amazonaws.com/npm/my_repo/:always-auth=true
   ```

**示例 npm 配置文件 (`.npmrc`)**

 以下是按照上述说明设置 CodeArtifact 注册表端点、添加身份验证令牌和配置后的示例`.npmrc`文件`always-auth`。

```
registry=https://my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my-cli-repo/
//my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:_authToken=eyJ2ZX...
//my_domain-111122223333.d.codeartifact.us-west-2.amazonaws.com/npm/my_repo/:always-auth=true
```

## 运行 npm 命令
<a name="running-npm-commands"></a>

配置 npm 客户端后，您可以运行 npm 命令。假设您的存储库或其中一个上游存储库中存在程序包，则可以使用 `npm install` 来安装。例如，使用以下命令来安装 `lodash` 程序包。

```
npm install lodash
```

使用以下命令将新的 npm 包发布到 CodeArtifact 存储库。

```
npm publish
```

有关如何创建 npm 程序包的信息，请参阅 npm 文档网站上的[创建 Node.js 模块](https://docs.npmjs.com/getting-started/creating-node-modules)。有关支持的 npm 命令列表，请参阅 [npm Comm CodeArtifact and Suppor](npm-commands.md) t。

## 验证 npm 身份验证和授权
<a name="verifying-npm-authentication-and-authorization"></a>

调用 `npm ping` 命令是验证以下项的一种方式：
+ 您已正确配置凭据，以便可以对 CodeArtifact 存储库进行身份验证。
+ 授权配置为您授予 `ReadFromRepository` 权限。

成功调用 `npm ping` 后的输出如下所示。

```
$ npm -d ping
npm info it worked if it ends with ok
npm info using npm@6.4.1
npm info using node@v9.5.0
npm info attempt registry request try #1 at 4:30:59 PM
npm http request GET https://<domain>.d.codeartifact.us-west-2.amazonaws.com/npm/shared/-/ping?write=true
npm http 200 https:///npm/shared/-/ping?write=true
Ping success: {}
npm timing npm Completed in 716ms
npm info ok
```

`-d` 选项会让 npm 输出额外的调试信息，包括存储库 URL。通过这些信息，可以轻松确认 npm 已配置为使用您期望的存储库。

## 改回默认 npm 注册表
<a name="revert-default-npm-registry"></a>

配置 npm 会将 npm 注册表 CodeArtifact 设置为指定的 CodeArtifact 存储库。完成连接后，你可以运行以下命令将 npm 注册表设置回其默认注册表。 CodeArtifact

```
npm config set registry https://registry.npmjs.com/
```

## 解决 npm 8.x 或更高版本中安装缓慢的问题
<a name="troubleshooting-slow-npm-install"></a>

在 npm 版本 8.x 及更高版本中存在一个已知问题，也即，如果向程序包存储库发出请求，并且存储库将客户端重定向到 Amazon S3 而不是直接流式传输资产，则 npm 客户端可能对于每个依赖项会挂起几分钟。

由于 CodeArtifact 存储库旨在始终将请求重定向到 Amazon S3，因此有时会出现此问题，由于 npm 安装时间长，这会导致构建时间过长。这种行为的实例将以进度条的形式出现，显示达几分钟。

要避免此问题，请在 `npm` cli 命令中使用 `--no-progress` 或 `progress=false` 标志，如以下示例所示。

```
npm install lodash --no-progress
```