

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 搭配 CodeArtifact 設定和使用 npm
<a name="npm-auth"></a>

在 CodeArtifact 中建立儲存庫之後，您可以使用 npm 用戶端來安裝和發佈套件。使用儲存庫端點和授權字符設定 npm 的建議方法是使用 `aws codeartifact login`命令。您也可以手動設定 npm。

**Contents**
+ [使用登入命令設定 npm](#configure-npm-login-command)
+ [不使用登入命令設定 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)

## 使用登入命令設定 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 AWS CLI .9.5 或更新版本才能成功執行`aws codeartifact login`命令。

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

此命令會對 \$1/.npmrc 檔案進行下列變更：
+ 使用您的 AWS 登入資料從 CodeArtifact 擷取授權字符後，新增授權字符。
+ 將 npm 登錄檔設定為 `--repository`選項指定的儲存庫。
+ **對於 npm 6 和更低：**新增 ，`"always-auth=true"`以便為每個 npm 命令傳送授權字符。

呼叫 後的預設授權期間`login`為 12 小時，`login`必須呼叫 以定期重新整理字符。如需使用 `login`命令建立的授權字符的詳細資訊，請參閱 [使用 `login`命令建立的字符](tokens-authentication.md#auth-token-login)。

## 不使用登入命令設定 npm
<a name="configuring-npm-without-using-the-login-command"></a>

您可以使用 CodeArtifact 儲存庫設定 npm，無需 `aws codeartifact login`命令，方法是手動更新 npm 組態。

**設定 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)。如需 CodeArtifact 支援的 npm 命令清單，請參閱 [npm 命令支援](npm-commands.md)。

## 驗證 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>

使用 CodeArtifact 設定 npm 會將 npm 登錄檔設定為指定的 CodeArtifact 儲存庫。當您完成連線至 CodeArtifact 時，您可以執行下列命令，將 npm 登錄檔設回其預設登錄檔。

```
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 安裝時間過長。此行為的執行個體會以進度列顯示自己幾分鐘。

若要避免此問題，請使用 `--no-progress`或 `progress=false`旗標搭配 `npm` cli 命令，如下列範例所示。

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