使用 npm 範圍來管理 Azure Artifacts 中的套件

Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022

NPM 範圍有助於將相關套件分類到群組中。 它們讓你可以建立與其他使用者建立套件名稱相同的套件,且不會有衝突。 使用範圍時,您可以加入範圍前綴 @scopeName,並將 .npmrc 檔案設定為使用具有該範圍的摘要,藉此區分公用與私人套件。

Azure Artifacts 支援從訂閱源或公開登錄檔發佈與下載有範圍與非範圍的套件。 NPM 範圍在使用自架式本地伺服器且沒有網路連線時特別有用,因為在這些情況下設定上游來源不可行。 總結來說,當你使用內窺鏡時:

  • 你不用擔心名稱衝突。
  • 安裝或發佈套件不需要更改 npm 登錄檔。
  • 每個 npm 組織或使用者都有自己的範圍,只有擁有者或範圍成員能將套件發佈到該範圍內。

Prerequisites

產品 要求
Azure DevOps - Azure DevOps 組織。
- 一個Azure DevOps 計畫。
- Azure Artifacts 資料饋送。
- 下載並安裝 Node.js 和 npm。

連接到您的動態消息

在設定 npm 範圍之前,先把你的專案連接到 Azure Artifacts feed。 務必完成先修條件並建立訂閱,然後依照這些步驟操作。

Azure Artifacts 建議使用兩個獨立的 .npmrc 檔案。 在使用者目錄裡保留一個檔案來存放憑證,第二個檔案則放在與 package.json 檔案相同的目錄,用來儲存你針對資訊流的專屬設定。

  1. 登入 Azure DevOps,然後進入你的專案。

  2. 選取 構件,然後從下拉選單中選取您的資料流。

  3. 選擇 「連接到串流」,然後從左側導覽窗格選擇 npm 。

  4. 如果你是第一次在 npm 上使用 Azure Artifacts,請選擇「取得工具」,並依照指示安裝作業系統的前置條件。 你必須先安裝 Node.js 和 npm。 接著,請根據您使用的作業系統,在 Windows 上安裝 vsts-npm-auth,或在非 Windows 環境中設定憑證。 非 Windows 相關指引請參見「連接至串流 - 其他」。

  5. 在和你 package.json 檔案相同的目錄裡建立一個 .npmrc 檔案,然後把 Project 設定區段的片段貼到那個檔案裡。

  6. 在 Windows 上,執行以下指令,將 Azure Artifacts 令牌加入你的使用者層級 .npmrc 檔案。 你不需要每次都執行這個指令。 當令牌到期時,npm 會回傳 401 未授權 錯誤,表示該重新整理了。

vsts-npm-auth -config .npmrc

備註

vsts-npm-auth在 Azure DevOps Server 中不被支援。 非 Windows 相關指引請參見「連接至串流 - 其他」。

範圍設定

若要在 Azure Artifacts 中使用範圍命名,請更新您的專案 .npmrc 檔案,讓您發佈或安裝的具範圍命名套件可透過您的摘要來解析。 把 registry=<YOUR_SOURCE_URL> 替換為 @ScopeName:registry=<YOUR_SOURCE_URL>。

同時更新你的 package.json 檔案,包含範圍名稱和套件名稱,例如: { "name": "@ScopeName/PackageName" }。 以下範例說明如何配置組織範圍與專案範圍的資訊流。

  • 組織範圍的資訊流:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    {
      "name": "@ScopeName/PackageName"
    }
    
  • 專案範圍的動態消息:

    @ScopeName:registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
    
    {
      "name": "@ScopeName/PackageName"
    }
    

範例

  • .npmrc 檔案:

    @local:registry=https://pkgs.dev.azure.com/FabrikamOrg/NpmDemo/_packaging/FabrikamFeed/npm/registry/
    
  • package.json 檔案:

    {
      "name": "@demo/js-e2e-express-server",
      "version": "2.0.0",
      "description": "JavaScript server written with Express.js",
      "main": "index.js",
      "directories": {
        "doc": "docs",
        "test": "test"
      }
    }
    

發佈限定範圍的套件

在你設定好範圍並更新專案檔案後,打開命令提示字元視窗,進入專案目錄,執行以下指令來發佈你的範圍化套件。 在前一個例子中,套件是在 @local scope 之下發佈的。

npm publish

上游來源與範圍

上游來源提供最多的彈性。 透過使用上游來源,你可以同時使用Azure Artifacts feed 中的有範圍和無範圍的套件,同時也能使用像 npmjs.com 這類公開登錄檔的套件。 當你希望單一串流同時作為內部套件和核准外部依賴的主要來源時,這種方法非常有效。

瞄準鏡雖然限制較多,但在適當情況下仍可作為實用選項。 使用作用域時,每個套件名稱必須以 @<scope>開頭,這表示你需要在整個套件中採用並維持這個命名慣例。 例如,如果你將套件發佈為 @local/my-package,你必須在所有被引用的套件中繼續使用該作用域名稱。

這個要求可能會增加額外負擔,尤其是如果你打算之後將相同的套件發佈到公開登錄檔。 如果你在部署套件時移除範圍,也必須更新 package.json 檔案和相關專案中的對應參考。

即使有這些限制,當上游訊號不實用時,示波器仍可作為可行的替代方案。 這在孤立或自架環境中尤其明顯,因為無法存取公開登錄檔,且你想避免套件名稱衝突,同時保持套件在資訊流中有序。