

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

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

# 使用上游儲存庫請求套件版本
<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`因為這是中繼儲存庫。