

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

# 搭配 npm 使用 CodeArtifact
<a name="using-npm"></a>

這些主題說明如何搭配 CodeArtifact 使用 Node.js 套件管理員 npm。

**注意**  
CodeArtifact 支援 `node v4.9.1` 和更新版本 和更新版本 和 `npm v5.0.0`和更新版本。

**Topics**
+ [設定和使用 npm](npm-auth.md)
+ [設定和使用 Yarn](npm-yarn.md)
+ [npm 命令支援](npm-commands.md)
+ [npm 標籤處理](npm-tags.md)
+ [支援 npm 相容套件管理員](npm-other-clients.md)

# 搭配 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
```

# 設定和使用 Yarn 搭配 CodeArtifact
<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`命令設定 Yarn with CodeArtifact。`login` 命令將使用 CodeArtifact 儲存庫端點資訊和登入資料來設定 \$1/.npmrc 檔案。透過 `Yarn 1.X`，`yarn`命令會使用來自 \$1/.npmrc 檔案的組態資訊。

**`Yarn 1.X` 使用登入命令設定**

1. 如果您尚未這麼做，請設定 AWS 登入資料以搭配 使用 AWS CLI，如 中所述[CodeArtifact 入門](getting-started.md)。

1. 若要成功執行`aws codeartifact login`命令，必須安裝 npm。如需安裝說明，請參閱 [npm 文件中的下載和安裝 Node.js 和](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm/) *npm*。

1. 使用 `aws codeartifact login`命令來擷取 CodeArtifact 登入資料，並設定您的 \$1/.npmrc 檔案。
   + 以您的 CodeArtifact 網域名稱取代 *my\$1domain*。
   + 以網域擁有者 AWS 的帳戶 ID 取代 *111122223333*。如果您要存取您擁有之網域中的儲存庫，則不需要包含 `--domain-owner`。如需詳細資訊，請參閱[跨帳戶網域](domain-overview.md#domain-overview-cross-account)。
   + 將 *my\$1repo* 取代為您的 CodeArtifact 儲存庫名稱。

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

   `login` 命令會對 \$1/.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`新增至 \$1/.npmrc 檔案，才能使用 Yarn。

   1. 在文字編輯器中開啟您的 \$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 2.X`更新`.yarnrc.yml`組態來設定 `yarn config set`。

**從命令列更新`yarnrc.yml`組態**

1. 如果您尚未這麼做，請設定 AWS 登入資料以搭配 使用 AWS CLI，如 中所述[CodeArtifact 入門](getting-started.md)。

1. 使用 `aws codeartifact get-repository-endpoint`命令來取得 CodeArtifact 儲存庫的端點。
   + 將 *my\$1domain* 取代為您的 CodeArtifact 網域名稱。
   + 以網域擁有者 AWS 的帳戶 ID 取代 *111122223333*。如果您要存取您擁有之網域中的儲存庫，則不需要包含 `--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
   ```

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)。
   + 以您的 CodeArtifact 網域名稱取代 *my\$1domain*。
   + 以網域擁有者 AWS 的帳戶 ID 取代 *111122223333*。如果您要存取您擁有之網域中的儲存庫，則不需要包含 `--domain-owner`。如需詳細資訊，請參閱[跨帳戶網域](domain-overview.md#domain-overview-cross-account)。
   + 將 *my\$1repo* 取代為您的 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`。

# npm 命令支援
<a name="npm-commands"></a>

以下各節摘要 CodeArtifact 儲存庫支援的 npm 命令，以及不支援的特定命令。

**Contents**
+ [支援與儲存庫互動的命令](#supported-commands-that-interact-with-a-repository)
+ [支援的用戶端命令](#supported-client-side-commands)
+ [不支援的命令](#unsupported-commands)

## 支援與儲存庫互動的命令
<a name="supported-commands-that-interact-with-a-repository"></a>

本節列出 npm 命令，其中 npm 用戶端向已設定的登錄檔提出一或多個請求 （例如，使用 `npm config set registry` )。已驗證這些命令在針對 CodeArtifact 儲存庫調用時可正常運作。


****  

| 命令 | Description | 
| --- | --- | 
|   [錯誤](https://docs.npmjs.com/cli/bugs)   |  嘗試猜測套件錯誤追蹤器 URL 的位置，然後嘗試開啟它。  | 
|   [ci](https://docs.npmjs.com/cli/ci)   |  安裝具有乾淨板塊的專案。  | 
|   [棄用](https://docs.npmjs.com/cli/deprecate)   |  棄用套件的版本。  | 
|   [dist-tag](https://docs.npmjs.com/cli/dist-tag)   |  修改套件分佈標籤。  | 
|   [文件](https://docs.npmjs.com/cli/docs)   |  嘗試猜測套件文件 URL 的位置，然後嘗試使用 `--browser` 組態參數將其開啟。  | 
|   [醫生](https://docs.npmjs.com/cli/doctor)   |  執行一組檢查，以確保您的 npm 安裝具有管理 JavaScript 套件所需的內容。  | 
|   [安裝](https://docs.npmjs.com/cli/install)   |  安裝套件。  | 
|   [install-ci-test](https://docs.npmjs.com/cli/install-ci-test)   |  安裝具有乾淨板塊的專案並執行測試。別名：`npm cit`。此命令會立即執行 ，`npm ci`後面接著 `npm test`。  | 
|   [install-test](https://docs.npmjs.com/cli/install-test)   |  安裝套件並執行測試。執行 `npm install`，然後立即執行 `npm test`。  | 
|   [過時](https://docs.npmjs.com/cli/outdated)   |  檢查設定的登錄檔，以查看是否有任何已安裝的套件目前已過期。  | 
|   [ping](https://docs.npmjs.com/cli/ping)   |  Ping 已設定或指定的 npm 登錄檔，並驗證身分驗證。  | 
|   [發佈](https://docs.npmjs.com/cli/publish)   |  將套件版本發佈至登錄檔。  | 
|   [update](https://docs.npmjs.com/cli/update)   |  猜測套件儲存庫 URL 的位置，然後嘗試使用 `--browser` 組態參數將其開啟。  | 
|   [檢視](https://docs.npmjs.com/cli/view)   |  顯示套件中繼資料。可用於列印中繼資料屬性。  | 

## 支援的用戶端命令
<a name="supported-client-side-commands"></a>

這些命令不需要與儲存庫進行任何直接互動，因此 CodeArtifact 不需要執行任何動作來支援儲存庫。


****  

| 命令 | Description | 
| --- | --- | 
|   [組建](https://docs.npmjs.com/cli/v6/commands/npm-build)   |  建置套件。  | 
|   [快取](https://docs.npmjs.com/cli/cache)   |  操作套件快取。  | 
|   [完成](https://docs.npmjs.com/cli/completion)   |  在所有 npm 命令中啟用索引標籤完成。  | 
|   [組態](https://docs.npmjs.com/cli/config)   |  更新使用者和全域`npmrc`檔案的內容。  | 
|   [資料刪除](https://docs.npmjs.com/cli/dedupe)   |  搜尋本機套件樹狀目錄，並嘗試透過進一步移動相依性來簡化結構，讓多個相依套件更有效地共用這些樹狀目錄。  | 
|   [編輯](https://docs.npmjs.com/cli/edit)   |  編輯已安裝的套件。選取目前工作目錄中的相依性，並在預設編輯器中開啟套件資料夾。  | 
|   [探索](https://docs.npmjs.com/cli/explore)   |  瀏覽已安裝的套件。在指定的已安裝套件目錄中產生子殼。如果指定命令，則會在 subshell 中執行，然後立即終止。  | 
|   [help](https://docs.npmjs.com/cli/help)   |  取得 npm 的說明。  | 
|   [help-search](https://docs.npmjs.com/cli/help-search)   |  搜尋 npm 說明文件。  | 
|   [init](https://docs.npmjs.com/cli/init)   |  建立 `package.json` 檔案。  | 
|   [連結](https://docs.npmjs.com/cli/link)   |  Symlink 套件資料夾。  | 
|   [ls](https://docs.npmjs.com/cli/ls)   |  列出已安裝的套件。  | 
|   [套件](https://docs.npmjs.com/cli/pack)   |  從套件建立 tarball。  | 
|   [prefix](https://docs.npmjs.com/cli/prefix)   |  顯示字首。除非`-g`另有指定，否則這是包含`package.json`檔案最接近的父目錄。  | 
|   [黑](https://docs.npmjs.com/cli/prune)棗   |  移除未列在父套件相依性清單上的套件。  | 
|   [重建](https://docs.npmjs.com/cli/rebuild)   |  在相符的資料夾上執行 `npm build`命令。  | 
|   [重新啟動](https://docs.npmjs.com/cli/restart)   |  執行套件的停止、重新啟動和啟動指令碼，以及相關聯的前置和後置指令碼。  | 
|   [根](https://docs.npmjs.com/cli/root)   |  列印要標準輸出的有效`node_modules`資料夾。  | 
|   [run-script](https://docs.npmjs.com/cli/run-script)   |  執行任意套件指令碼。  | 
|   [shrinkwrap](https://docs.npmjs.com/cli/shrinkwrap)   |  鎖定要發佈的相依性版本。  | 
|   [解除安裝](https://docs.npmjs.com/cli/uninstall)   |  解除安裝套件。  | 

## 不支援的命令
<a name="unsupported-commands"></a>

CodeArtifact 儲存庫不支援這些 npm 命令。


****  

| 命令 | Description | 備註 | 
| --- | --- | --- | 
|   [存取](https://docs.npmjs.com/cli/access)   |  設定已發佈套件的存取層級。  |  CodeArtifact 使用與公有 npmjs 儲存庫不同的許可模型。  | 
|   [adduser](https://docs.npmjs.com/cli/adduser)   |  新增登錄使用者帳戶  |  CodeArtifact 使用與公有 npmjs 儲存庫不同的使用者模型。  | 
|   [稽核](https://docs.npmjs.com/cli/audit)   |  執行安全稽核。  |  CodeArtifact 目前不會提供安全漏洞資料。  | 
|   [勾點](https://docs.npmjs.com/cli/hook)   |  管理 npm 勾點，包括新增、移除、列出和更新。  |  CodeArtifact 目前不支援任何類型的變更通知機制。  | 
|   [登入](https://docs.npmjs.com/cli-commands/adduser.html)   |  驗證使用者。這是 `npm adduser` 的別名。  |  CodeArtifact 使用與公有 npmjs 儲存庫不同的身分驗證模型。如需詳細資訊，請參閱[使用 npm 進行身分驗證](npm-auth.md)。  | 
|   [登出](https://docs.npmjs.com/cli/logout)   |  登出登錄檔。  |  CodeArtifact 使用與公有 npmjs 儲存庫不同的身分驗證模型。您無法從 CodeArtifact 儲存庫登出，但身分驗證字符會在其可設定的過期時間後過期。預設字符持續時間為 12 小時。  | 
|   [擁有者](https://docs.npmjs.com/cli/owner)   |  管理套件擁有者。  |  CodeArtifact 使用與公有 npmjs 儲存庫不同的許可模型。  | 
|   [profile](https://docs.npmjs.com/cli/profile)   |  變更登錄檔設定檔上的設定。  |  CodeArtifact 使用與公有 npmjs 儲存庫不同的使用者模型。  | 
|   [search](https://docs.npmjs.com/cli/search)   |  搜尋登錄檔中符合搜尋詞彙的套件。  |  CodeArtifact 支援使用 [list-packages](list-packages.md) 命令的有限搜尋功能。  | 
|   [星星](https://docs.npmjs.com/cli/star)   |  標記您最愛的套件。  |  CodeArtifact 目前不支援任何類型的最愛機制。  | 
|   [星星](https://docs.npmjs.com/cli/stars)   |  檢視標示為我的最愛之套件。  |  CodeArtifact 目前不支援任何類型的最愛機制。  | 
|   [團隊](https://docs.npmjs.com/cli/team)   |  管理組織團隊和團隊成員資格。  |  CodeArtifact 使用與公有 npmjs 儲存庫不同的使用者和群組成員資格模型。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[身分 （使用者、群組和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。  | 
|   [t](https://docs.npmjs.com/cli/token)oken   |  管理您的身分驗證字符。  |  CodeArtifact 使用不同的模型來取得身分驗證字符。如需詳細資訊，請參閱[使用 npm 進行身分驗證](npm-auth.md)。  | 
|   [取消發佈](https://docs.npmjs.com/cli/unpublish)   |  從登錄檔中移除套件。  |  CodeArtifact 不支援使用 npm 用戶端從儲存庫移除套件版本。您可以使用 [delete-package-version](delete-package.md) 命令。  | 
|   [whoami](https://docs.npmjs.com/cli/whoami)   |  顯示 npm 使用者名稱。  |  CodeArtifact 使用與公有 npmjs 儲存庫不同的使用者模型。  | 

# npm 標籤處理
<a name="npm-tags"></a>

 npm 登錄檔支援*標籤*，這些是套件版本的字串別名。您可以使用標籤來提供別名，而不是版本號碼。例如，您可能有一個具有多個開發串流的專案，並為每個串流使用不同的標籤 （例如 、`stable``beta`、`dev`、`canary`)。如需詳細資訊，請參閱 npm 網站上的 [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>

 CodeArtifact `add`儲存庫中的三個`npm dist-tag`命令 (`rm`、 和 `ls`) 函數與[預設 npm 登錄](https://registry.npmjs.com/)檔中的命令相同。

## npm 標籤和 CopyPackageVersions API
<a name="tags-and-cpv"></a>

當您使用 `CopyPackageVersions` API 複製 npm 套件版本時，所有別名為該版本的標籤都會複製到目的地儲存庫。當複製的版本具有也存在於目的地的標籤時，複製操作會將目的地儲存庫中的標籤值設定為符合來源儲存庫中的值。

例如，假設儲存庫 S 和儲存庫 D 都包含具有最新標籤集的單一版本`web-helper`套件，如下表所示。


****  

| 儲存庫 | 套件名稱 | 套件標籤 | 
| --- | --- | --- | 
|  S  |  `web-helper`  |   *最新* (1.0.1 版的別名）  | 
|  D  |  `web-helper`  |   *最新* (1.0.0 版的別名）  | 

 `CopyPackageVersions` 被叫用將 `web-helper` 1.0.1 從 S 複製到 D。操作完成後，儲存庫 D `web-helper`中的 `latest`標籤別名為 1.0.1，而不是 1.0.0。

如果您需要在複製後變更標籤，請使用 `npm dist-tag`命令直接在目的地儲存庫中修改標籤。如需 `CopyPackageVersions` API 的詳細資訊，請參閱[在儲存庫之間複製套件](copy-package.md)。

## npm 標籤和上游儲存庫
<a name="tags-and-upstreams"></a>

當 npm 請求套件的標籤，且該套件的版本也出現在上游儲存庫中時，CodeArtifact 會先合併標籤，再將其傳回用戶端。例如，名為 R 的儲存庫具有名為 U 的上游儲存庫。下表顯示兩個儲存庫中存在`web-helper`的名為 的套件標籤。


****  

| 儲存庫 | 套件名稱 | 套件標籤 | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   *最新* (1.0.0 版的別名）  | 
|  U  |  `web-helper`  |   *alpha* (1.0.1 版的別名）  | 

在此情況下，當 npm 用戶端從儲存庫 R 擷取`web-helper`套件的標籤時，它會同時接收*最新的*標籤和 *Alpha* 標籤。標籤指向的版本不會變更。

當上游和下游儲存庫中的相同套件上都存在相同的標籤時，CodeArtifact 會使用*上游*儲存庫中存在的標籤。例如，假設 *webhelper* 上的標籤已修改為如下所示。


****  

| 儲存庫 | 套件名稱 | 套件標籤 | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   *最新* (1.0.0 版的別名）  | 
|  U  |  `web-helper`  |   *最新* (1.0.1 版的別名）  | 

在此情況下，當 npm 用戶端從儲存庫 R 擷取套件 *Web-helper* 的標籤時，*最新的*標籤會別名為 *1.0.1* 版，因為這是上游儲存庫中的標籤。這可讓您透過執行 ，在尚未出現在下游儲存庫的上游儲存庫中輕鬆使用新的套件版本`npm update`。

在下游儲存庫中發佈新版本的套件時，在上游儲存庫中使用 標籤可能會造成問題。例如，假設套件 *Web-helper* 上的最新標籤在 R 和 U 中都相同。


****  

| 儲存庫 | 套件名稱 | 套件標籤 | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   *最新* (1.0.1 版的別名）  | 
|  U  |  `web-helper`  |   *最新* (1.0.1 版的別名）  | 

當 1.0.2 版發佈至 R 時，npm 會將*最新的*標籤更新至 1.0.2。


****  

| 儲存庫 | 套件名稱 | 套件標籤 | 
| --- | --- | --- | 
|  R  |  `web-helper`  |   *最新* (1.0.2 版的別名）  | 
|  U  |  `web-helper`  |   *最新* (1.0.1 版的別名）  | 

不過，npm 用戶端永遠不會看到此標籤值，因為 U 中*最新的* 值是 1.0.1。在發佈 1.0.2 之後，立即`npm install`針對儲存庫 R 執行 會安裝 1.0.1，而不是剛發佈的版本。若要安裝最近發佈的版本，您必須指定確切的套件版本，如下所示。

```
npm install web-helper@1.0.2
```

# 支援 npm 相容套件管理員
<a name="npm-other-clients"></a>

這些其他套件管理員與 CodeArtifact 相容，並且使用 npm 套件格式和 npm 線路通訊協定：
+  [pnpm 套件管理員](https://pnpm.js.org)。確認可與 CodeArtifact 搭配使用的最新版本為 3.3.4，已於 2019 年 5 月 18 日發行。
+  [Yarn 套件管理員](https://yarnpkg.com/)。確認可與 CodeArtifact 搭配使用的最新版本為 1.21.1，已於 2019 年 12 月 11 日發行。

**注意**  
我們建議搭配 CodeArtifact 使用 Yarn 2.x。Yarn 1.x 沒有 HTTP 重試，這表示更容易發生間歇性服務錯誤，導致 500 層級的狀態碼或錯誤。無法為 Yarn 1.x 設定不同的重試策略，但已將其新增至 Yarn 2.x。您可以使用 Yarn 1.x，但您可能需要在建置指令碼中新增更高層級的重試。例如，在迴圈中執行您的 yarn 命令，以便在下載套件失敗時重試。