

Amazon CodeCatalyst 不再向新客戶開放。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[如何從 CodeCatalyst 遷移](migration.md)。

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

# 設定和使用上游儲存庫
<a name="packages-upstream-repositories"></a>

您可以將閘道儲存庫和其他 CodeCatalyst 套件儲存庫做為上游連接至套件儲存庫。這可讓套件管理員用戶端使用單一套件儲存庫端點，存取包含在多個套件儲存庫中的套件。以下是使用上游儲存庫的主要優點：
+ 您只需使用單一儲存庫端點來設定套件管理員，即可從多個來源提取。
+ 從上游儲存庫取用的套件會存放在您的下游儲存庫中，這可確保即使上游儲存庫遇到意外中斷或上游儲存庫中的套件遭到刪除，您的套件仍可使用。

您可以在建立套件儲存庫時新增上游儲存庫。您也可以在 CodeCatalyst 主控台中，從現有的套件儲存庫新增或移除上游儲存庫。

當您將閘道儲存庫新增為上游儲存庫時，套件儲存庫會連線至閘道儲存庫對應的公有套件儲存庫。如需支援的公有套件儲存庫清單，請參閱 [支援的外部套件儲存庫及其閘道儲存庫](packages-connect-external.md#packages-upstream-repositories-supported-external)。

您可以將多個儲存庫連結為上游儲存庫。例如，假設您的團隊建立名為 的儲存庫，`project-repo`並且已經使用另一個名為 `team-repo` 的儲存庫，該儲存庫將 **npm-public-registry-gateway** 新增為上游儲存庫，該儲存庫連接到公有 npm 儲存庫 `npmjs.com`。您可以新增 `team-repo`做為 的上游儲存庫`project-repo`。在此情況下，您只需將套件管理員設定為使用 從 `project-repo`、、 `team-repo``npm-public-registry-gateway`和 `project-repo`提取套件`npmjs.com`。

**Topics**
+ [

# 新增上游儲存庫
](packages-upstream-repositories-add.md)
+ [

# 編輯上游儲存庫的搜尋順序
](packages-upstream-repositories-search-order.md)
+ [

# 使用上游儲存庫請求套件版本
](packages-upstream-repositories-request.md)
+ [

# 移除上游儲存庫
](packages-upstream-repositories-remove.md)

# 新增上游儲存庫
<a name="packages-upstream-repositories-add"></a>

將公有套件儲存庫或其他 CodeCatalyst 套件儲存庫做為上游儲存庫新增至下游儲存庫，可讓連線至下游儲存庫的套件管理員使用上游儲存庫中的所有套件。

**新增上游儲存庫**

1. 在導覽窗格中，選擇 **Packages (套件)**。

1. 在**套件儲存庫**頁面上，選擇要新增上游儲存庫的套件儲存庫。

1. 在套件儲存庫的名稱下，選擇**上游**，然後選擇**選取上游儲存庫**。

1. 在**選取上游類型**中，選擇下列其中一項：
   + **閘道儲存庫**

     您可以從可用的閘道儲存庫清單中選擇。
**注意**  
若要連線到公有外部套件授權單位，例如 Maven Central、npmjs.com 或 Nuget Gallery，CodeCatalyst 會使用閘道儲存庫做為中介儲存庫，以搜尋和存放從外部儲存庫提取的套件。這可節省時間和資料傳輸，因為專案中的所有套件儲存庫將使用來自閘道中介儲存庫的套件。如需詳細資訊，請參閱[連線到公有外部儲存庫](packages-connect-external.md)。
   + **CodeCatalyst 儲存庫**

     您可以從專案中可用的 CodeCatalyst 套件儲存庫清單中選擇。

1. 當您選取所有要新增為上游儲存庫的儲存庫時，請選擇**選取**，然後選擇**儲存**。

   如需變更上游儲存庫搜尋順序的詳細資訊，請參閱 [編輯上游儲存庫的搜尋順序](packages-upstream-repositories-search-order.md)。

新增上游儲存庫後，您可以使用連線至本機儲存庫的套件管理員，從上游儲存庫擷取套件。您不需要更新套件管理員組態。如需從上游儲存庫請求套件版本的詳細資訊，請參閱 [使用上游儲存庫請求套件版本](packages-upstream-repositories-request.md)。

# 編輯上游儲存庫的搜尋順序
<a name="packages-upstream-repositories-search-order"></a>

CodeCatalyst 會依設定的搜尋順序搜尋上游儲存庫。找到套件時，CodeCatalyst 會停止搜尋。您可以變更上游儲存庫搜尋套件的順序。

**編輯上游儲存庫的搜尋順序**

1. 在導覽窗格中，選擇 **Packages (套件)**。

1. 在**套件儲存庫**頁面上，選擇您要編輯其上游儲存庫搜尋順序的套件儲存庫。

1. 在套件儲存庫的名稱下，選擇**上游**。

1. 在**上游儲存庫**區段中，您可以檢視上游儲存庫及其搜尋順序。若要變更搜尋順序，請將儲存庫拖放到清單中。

1. 當您完成上游儲存庫的搜尋順序編輯後，請選擇**儲存**。

# 使用上游儲存庫請求套件版本
<a name="packages-upstream-repositories-request"></a>

下列範例顯示套件管理員從具有上游儲存庫的 CodeCatalyst 套件儲存庫請求套件的可能案例。

在此範例中，套件管理員，例如 `npm`，會從具有多個上游儲存庫`downstream`且名為 的套件儲存庫請求套件版本。請求套件時，可能會發生下列情況：
+  如果 `downstream`包含請求的套件版本，則會傳回給用戶端。
+  如果 `downstream` 不包含請求的套件版本，CodeCatalyst 會以其設定的搜尋順序，在 `downstream`的上游儲存庫中搜尋它。如果找到套件版本，則會將其參考複製到 `downstream`，並將套件版本傳回給用戶端。
+  如果 `downstream`或其上游儲存庫都不包含套件版本，則會將 HTTP 404 `Not Found`回應傳回給用戶端。

 一個儲存庫允許的直接上游儲存庫數量上限為 10。請求套件版本時CodeCatalyst 搜尋的儲存庫數目上限為 25。

## 來自上游儲存庫的套件保留
<a name="package-retention-upstream-repos"></a>

如果在上游儲存庫中找到請求的套件版本，則會保留其參考，並且一律可在請求它的儲存庫中使用。這可確保在上游儲存庫發生意外中斷時，您可以存取套件。保留的套件版本不受下列任何一項影響：
+  刪除上游儲存庫。
+  中斷上游儲存庫與下游儲存庫的連線。
+  從上游儲存庫刪除套件版本。
+  在上游儲存庫中編輯套件版本 （例如，將新資產新增至該儲存庫）。

## 透過上游關係擷取套件
<a name="fetching-packages-through-an-upstream-relationship"></a>

CodeCatalyst 可以透過稱為上游儲存庫的多個連結儲存庫來擷取套件。如果 CodeCatalyst 套件儲存庫與另一個與閘道儲存庫有上游連線的 CodeCatalyst 套件儲存庫有上游連線，則會從外部儲存庫複製不在上游儲存庫中的套件請求。例如，請考慮下列組態：名為 的儲存庫與閘道儲存庫`repo-A`有上游連線，`npm-public-registry-gateway`。 `npm-public-registry-gateway`與公有套件儲存庫有上游連線，https：//[https://npmjs.com](https://npmjs.com)。

![\[簡單的上游儲存庫圖表顯示三個鏈結在一起的儲存庫。\]](http://docs.aws.amazon.com/zh_tw/codecatalyst/latest/userguide/images/packages/upstream-with-external.png)


如果 `npm` 設定為使用 `repo-A`儲存庫，則執行 會`npm install`啟動將套件從 [https://npmjs.com](https://npmjs.com) 複製到 `npm-public-registry-gateway`。已安裝的版本也會提取至 `repo-A`。下列範例會安裝 `lodash`。

```
$ npm config get registry
https://packages.region.codecatalyst.aws/npm/space-name/proj-name/repo-name/
$ npm install lodash
+ lodash@4.17.20
added 1 package from 2 contributors in 6.933s
```

執行 之後`npm install`， 只`repo-A`包含最新版本 (`lodash 4.17.20`)，因為這是 `npm`自 擷取的版本`repo-A`。

 由於 `npm-public-registry-gateway`具有與 [https://npmjs.com](https://npmjs.com) 的外部上游連線，因此從 [https://npmjs.com](https://npmjs.com) 匯入的所有套件版本都會存放在 中`npm-public-registry-gateway`。這些套件版本可由任何上游連線導致 的下游儲存庫擷取`npm-public-registry-gateway`。

的內容`npm-public-registry-gateway`可讓您查看從 [https://npmjs.com](https://npmjs.com) 匯入的所有套件和套件版本。

## 中繼儲存庫中的套件保留
<a name="package-retention-intermediate-repositories"></a>

 CodeCatalyst 可讓您鏈結上游儲存庫。例如， `repo-A`可以讓 `repo-B`做為上游儲存庫，`repo-B`也可以讓 `repo-C`做為上游儲存庫。此組態可讓 中的套件版本，`repo-B`以及從 `repo-C`取得的套件版本`repo-A`。

![\[簡單的上游儲存庫圖表顯示三個鏈結在一起的儲存庫。\]](http://docs.aws.amazon.com/zh_tw/codecatalyst/latest/userguide/images/packages/upstream-chaining.png)


 當套件管理員連線至儲存庫`repo-A`並從儲存庫 擷取套件版本時`repo-C`，套件版本不會保留在儲存庫 中`repo-B`。套件版本只會保留在最新的下游儲存庫中，在此範例中為 `repo-A`。它不會保留在任何中繼儲存庫中。對於較長的鏈結也是如此；例如，如果有四個儲存庫：`repo-A`、`repo-C`、 `repo-B`和 `repo-D`，以及連接到從 `repo-A` 擷取套件版本的套件管理員`repo-D`，套件版本將保留在 中`repo-A`，但不保留在 `repo-B`或 中`repo-C`。

從公有套件儲存庫提取套件版本時，套件保留行為類似，但套件版本一律保留在與公有儲存庫有直接上游連線的閘道儲存庫中。例如， `repo-A` 將 `repo-B`作為上游儲存庫。 `repo-B` 將 `npm-public-registry-gateway`作為上游儲存庫，其與公有儲存庫 **npmjs.com** 具有上游連線；請參閱下圖。

![\[上游儲存庫圖表顯示三個與 npmjs.com 外部上游連線鏈結在一起的儲存庫。\]](http://docs.aws.amazon.com/zh_tw/codecatalyst/latest/userguide/images/packages/upstream-chaining-external.png)


 如果連接至 的套件管理員`repo-A`請求特定套件版本，例如 *lodash 4.17.20*，且套件版本不存在於三個儲存庫中的任何一個，則會從 **npmjs.com**：// 擷取套件版本。擷取 *lodash 4.17.20* 時，它會保留在 中`repo-A`，因為這是最遠的下游儲存庫，`npm-public-registry-gateway`而且它具有與公有外部儲存庫 **npmjs.com** 的上游連線。*lodash 4.17.20* 不會保留在 中，`repo-B`因為這是中繼儲存庫。

# 移除上游儲存庫
<a name="packages-upstream-repositories-remove"></a>

如果您不想再存取上游儲存庫中的套件，您可以從套件儲存庫中移除上游儲存庫。

**警告**  
當您移除上游儲存庫時，可能會中斷上游關係鏈，進而中斷您的專案或建置。

**移除上游儲存庫**

1. 在導覽窗格中，選擇 **Packages (套件)**。

1. 在**套件儲存庫**頁面上，選擇您要從中移除上游儲存庫的套件儲存庫。

1. 在套件儲存庫的名稱下，選擇**上游**。

1. 在**編輯上游儲存庫**區段中，尋找您要移除的上游儲存庫，然後選擇 ![\[Remove\]](http://docs.aws.amazon.com/zh_tw/codecatalyst/latest/userguide/images/packages/remove.png)。

1. 完成移除上游儲存庫後，請選擇**儲存**。