首頁 > web前端 > js教程 > 帶有Verdaccio的主機,發布和管理私人NPM軟件包

帶有Verdaccio的主機,發布和管理私人NPM軟件包

Jennifer Aniston
發布: 2025-02-17 09:39:15
原創
763 人瀏覽過

Verdaccio:輕鬆管理私有npm包的利器

Host, Publish and Manage Private npm Packages with Verdaccio

核心要點

  • Verdaccio 是 npm 商業私有包託管、發布和管理服務的免費替代方案。它允許創建本地 npm 註冊表,無需任何配置,並自帶數據庫。
  • Verdaccio 充當本地緩存/代理服務器,在自定義存儲庫中找不到依賴項時,會從官方 npm 註冊表下載依賴項,並將它們保存在本地存儲文件夾中。它還支持創建本地私有包。
  • Verdaccio 易於安裝和配置,並且可以設置為在偶爾崩潰時自動重啟。它還允許用戶註冊以發布包。
  • 除了託管私有包外,Verdaccio 還緩存公共包。它檢查其存儲文件夾中是否有請求的包,如果找不到,則將請求轉發到官方 npm 註冊表,下載、存儲並回復請求。這意味著即使官方註冊表宕機,仍然可以訪問緩存版本。

本文經 Panayiotis «pvgr» Velisarakos 和 Jurgen Van de Moere 審核。感謝所有 SitePoint 的同行評審員,使 SitePoint 內容盡善盡美!

Host, Publish and Manage Private npm Packages with Verdaccio

眾所周知,npm及其註冊表是事實上的 JavaScript 包管理器,也是全球最大的代碼集合。但有時在開發令人驚豔的新包時,您需要額外的隱私保護。無論是公司項目(不應公開共享)、碩士/學士論文項目,還是僅僅因為您像我一樣,有時會為自己在新主題上的最初嘗試感到羞愧。

無論出於何種原因,都有多種選擇。也許最簡單的方法是註冊 npm 的一項商業服務,然後就可以開始了。但這需要付費,可能並不適合每個人的錢包。

幸運的是,有一個名為 Verdaccio 的免費替代方案,它可以幫到您。

Verdaccio 簡介

Verdaccio 是一個 npm 包,允許您創建本地 npm 註冊表,無需任何配置。這是一個包含所有必要功能的項目,自帶數據庫。它通過充當本地緩存/代理服務器來實現這一點。

這意味著,每當您嘗試從自定義存儲庫安裝不存在的內容時,它都會 ping 官方 npm 註冊表並下載依賴項。您的自定義存儲庫會將這些依賴項保存在名為 storage 的簡單文件夾中。下一次安裝將使用此本地緩存的副本。最重要的是,npm 客戶端的一些命令(例如 npm login/adduser/publish)被複製以支持創建本地私有包,您稍後會在本文中看到它的使用。

如果您認為這沒有什麼新意,已經有 Sinopia 了,您是對的。 Verdaccio 只是 Sinopia 的一個分支,它保持向後兼容性,但同時試圖跟上官方 npm 的變化。 Sinopia 中沒有的一個這樣的變化是作用域包,您在使用 Angular 2 或 TypeScript npm 託管類型之類的庫時可能已經看到過。您可以通過前面的 @ 符號輕鬆識別它們:

<code># 安装 Angular2 依赖项
npm install @angular/core

# 安装 TypeScript 的官方 Node.js 类型定义
npm install @types/node</code>
登入後複製
登入後複製
登入後複製

Sinopia 和 Verdaccio 都可在 Mac/Linux 和 Windows 上運行。

Verdaccio 入門

由於 Verdaccio 是一個 npm 包,您只需運行以下命令即可安裝它:

<code>npm install -g verdaccio</code>
登入後複製
登入後複製
登入後複製

隨後調用 verdaccio 將啟動實例並運行您的私有註冊表。

默認情況下,它將在端口 4873 上監聽。稍後我們將討論如何更改這些設置。

在本文中,我們將介紹在您的開發機器上設置註冊表。在公司環境中,您可能需要在專用服務器上執行此操作,以便所有開發人員都可以訪問它。

Verdaccio 是一個 Node.js 應用程序,這意味著您應該注意在偶爾崩潰時重新啟動它。我建議使用 pm2。您只需運行以下步驟:

<code># 安装 pm2
npm install pm2 -g

# 使用 pm2 启动 Verdaccio
pm2 start PATH-TO-GLOBAL-VERDACCIO/verdaccio
# --> 例如,对于 Windows:C:/Users/[USERNAME]/AppData/Roaming/npm/node_modules/verdaccio/bin/verdaccio</code>
登入後複製
登入後複製

此外,如果在閱讀完本文後,您得出 Verdaccio 不適合您的結論,只需停止進程並使用以下命令卸載 Verdaccio:

<code>npm uninstall -g verdaccio</code>
登入後複製
登入後複製

配置客戶端

註冊表啟動並運行後,您需要將 npm 客戶端指向新的地址。這可以通過運行以下命令來完成:

<code>npm set registry https://www.php.cn/link/0f3ea482c9513bf4548f302a46d9932d/</code>
登入後複製

如果您只是按照本文中的步驟操作,稍後想要恢復到原始npm 註冊表,只需運行此命令npm set registry https://www.php.cn/link/c0ab525d634e80fd8e20e3d6dc00b11c (用於基於HTTPS 的訪問)或npm set registry https://www.php.cn/link/6baadc89159617043965f9e1889224e7 (用於經典HTTP 訪問)。

此外,如果您通過 HTTPS 提供註冊表服務,則需要設置適當的 CA 信息。

<code># 将值设置为 null 将使用操作系统提供的列表
npm set ca null</code>
登入後複製

現在,您可以通過導航到地址 https://www.php.cn/link/0f3ea482c9513bf4548f302a46d9932d 來訪問註冊表瀏覽器。

Host, Publish and Manage Private npm Packages with Verdaccio

配置自定義註冊表

服務器啟動時,會自動創建一個名為 config.yaml 的新配置文件。默認情況下,它將在您的用戶文件夾中創建。在 Windows 上,這可能如下所示:

<code>C:\Users\[USERNAME]\.config\verdaccio\config.yaml</code>
登入後複製

一個重要的設置是配置 Verdaccio 監聽的默認端口。您可以通過在配置文件末尾添加以下幾行來更改此設置。

<code># 安装 Angular2 依赖项
npm install @angular/core

# 安装 TypeScript 的官方 Node.js 类型定义
npm install @types/node</code>
登入後複製
登入後複製
登入後複製

另一個感興趣的設置可能是使用代理,尤其是在公司環境中。這些設置如下所示:

<code>npm install -g verdaccio</code>
登入後複製
登入後複製
登入後複製

請記住,更改任何配置後,通過終止當前進程或停止 pm2 進程並重新啟動它來重新啟動 Verdaccio。

註冊用戶

最後但並非最不重要的是,我們需要配置一個用戶,該用戶將包發佈到您的註冊表。我們可以使用默認的 adduser 命令來完成此操作,該命令指向我們的自定義註冊表。

<code># 安装 pm2
npm install pm2 -g

# 使用 pm2 启动 Verdaccio
pm2 start PATH-TO-GLOBAL-VERDACCIO/verdaccio
# --> 例如,对于 Windows:C:/Users/[USERNAME]/AppData/Roaming/npm/node_modules/verdaccio/bin/verdaccio</code>
登入後複製
登入後複製

之後,只需按照命令行上的提示操作即可。

請記住使用您之前配置的相同端口。

該用戶將用於針對 Verdaccio 實例進行身份驗證。除了上面提到的 config.yaml 文件外,您還會找到一個新創建的 htpasswd 文件,用於存儲您的登錄名和憑據。

您的第一個私有 npm 包

現在,我們準備創建我們的第一個私有包。我們將創建一個簡單的 hello-world 包,並查看發布它的過程。

創建包

首先,在某個位置創建一個名為 hello-world 的新文件夾。現在,我們需要啟動一個新包,我們使用命令 npm init 來完成此操作。您將被問到一堆問題,但現在,大多數問題都可以接受默認值。只需給它一個描述,將入口點保留在 index.js 中,並添加您的姓名作為作者。結果是一個名為 package.json 的文件,描述您的包。

一個好的做法是為您的包名稱添加前綴,以便您可以立即分辨出您是在使用私有本地源還是官方 npm 源。

接下來的部分是創建實際的包。因此,我們創建一個 index.js 文件。這個簡單的示例只會導出一個 HelloWorld 函數:

<code>npm uninstall -g verdaccio</code>
登入後複製
登入後複製

發布包

現在剩下的就是發布您的包了。為此,我們首先需要使用 npm login 登錄我們的註冊表。系統將提示您輸入您之前設置的用戶名和密碼。

完成此操作後,在 hello-world 的根目錄中只需運行 npm publish,即可完成操作。

如果您現在再次在瀏覽器中訪問註冊表瀏覽器,位於 https://www.php.cn/link/0f3ea482c9513bf4548f302a46d9932d/,您將看到列表中包含新的包

Host, Publish and Manage Private npm Packages with Verdaccio

示例使用者應用程序

現在我們已經發布了我們的私有包,讓我們創建一個簡單的演示應用程序來使用它。

在一個新文件夾 demo 中,我們再次使用 npm init 創建一個新的節點應用程序。同樣,接受所有建議,也許只添加描述和作者信息。

之後,創建一個 index.js 文件,它將充當我們應用程序的根目錄。

安裝您的私有包

為了安裝私有包,您基本上必須執行與標準 npm 過程相同的操作。

<code># 安装 Angular2 依赖项
npm install @angular/core

# 安装 TypeScript 的官方 Node.js 类型定义
npm install @types/node</code>
登入後複製
登入後複製
登入後複製

這會將包安裝到您的 node_modules 文件夾中,並更新 package.json 的 dependencies 部分。

現在我們可以使用該包了。打開 index.js 並添加以下代碼:

<code>npm install -g verdaccio</code>
登入後複製
登入後複製
登入後複製

現在,當您使用 node index.js 運行應用程序時,您應該在命令行上看到 Hello World 作為輸出。

恭喜,您剛剛發布並使用了您自己的私有包!

請求公共包

公共包也是如此。您只需繼續運行 npm install package-name,所有內容都將像往常一樣安裝在 node_modules 文件夾中。

Verdaccio 在幕後所做的是查看其存儲文件夾並檢查請求的包是否存在。如果不存在,它將嘗試將請求轉發到官方 npm 註冊表,下載並存儲它,然後回复您的請求。下次您為同一個包發出 npm install 請求時,它現在將提供該包。

因此,即使官方註冊表由於任何原因而宕機或無法訪問,您仍然可以訪問您自己的緩存版本。 Verdaccio 將始終只下載已請求的內容。如果您發布一些更新,則會根據需要下載這些更新。

請注意,註冊表瀏覽器不應該顯示公共包。如果您確實需要顯示它們,您可以編輯 .sinopia-db.json 文件並將包名稱手動添加到 list 數組中。請勿忘記之後重新啟動 Verdaccio。

結論

因此,現在您可以託管您自己的私有註冊表並受益於緩存的公共包。最重要的是,您現在還可以發布私有包,而無需與雲端通信。安裝完成後,所有相關的 npm 客戶端命令與往常一樣。

在您的一些包損壞或損壞的瘋狂情況下,請記住它只是一個託管您的包的文件夾存儲,因此導航到那裡並刪除有故障的包。下一次安裝可能會解決您的問題。

我希望您喜歡這篇文章,並期待在評論中聽到您的聲音!

關於使用 Verdaccio 的私有 NPM 包的常見問題解答 (FAQ)

什麼是 Verdaccio,為什麼我應該將它用於我的私有 NPM 包?

Verdaccio 是一個開源的、輕量級的、強大的私有 NPM 註冊表,允許您私下託管您自己的 NPM 包。對於想要控制其代碼和依賴項的開發人員來說,這是一個很好的工具。 Verdaccio 提供了一種安全有效的方式來管理 NPM 包,允許您緩存包、控制訪問,甚至在主 NPM 註冊表宕機時將其用作後備選項。

如何在我的系統上安裝 Verdaccio?

安裝 Verdaccio 非常簡單。您需要在系統上安裝 Node.js 和 npm。安裝完成後,您可以使用 npm install 命令安裝 Verdaccio:npm install -g verdaccio。這將在您的系統上全局安裝 Verdaccio。

如何使用 Verdaccio 發布我的私有 NPM 包?

安裝 Verdaccio 後,您可以通過首先使用 npm login 命令登錄到您的 Verdaccio 註冊表來發布您的私有 NPM 包。系統將提示您輸入您的用戶名、密碼和電子郵件。登錄後,導航到您的包目錄並使用 npm publish 命令發布您的包。

如何控制我在 Verdaccio 中私有 NPM 包的訪問權限?

Verdaccio 允許您通過其配置文件 config.yaml 來控制對私有 NPM 包的訪問權限。您可以指定誰可以訪問、發布和取消發布包。您還可以創建用戶組並將權限分配給這些組。

我可以將 Verdaccio 用作公共 NPM 包的緩存嗎?

是的,Verdaccio 可以充當公共 NPM 包的代理和緩存。這意味著,當您安裝包時,Verdaccio 將首先檢查它在其存儲中是否可用。如果不可用,它將從公共 NPM 註冊表獲取它並將其緩存以備將來使用。

如何配置 Verdaccio 以將其用作後備選項?

您可以通過在 .npmrc 文件中將其設置為您的主要註冊表來配置 Verdaccio 以充當後備選項。這樣,每當主 NPM 註冊表宕機時,npm 將自動使用 Verdaccio。

我可以將 Verdaccio 與其他工具集成嗎?

是的,Verdaccio 可以與各種工具集成,例如 Docker、Kubernetes 和 GitLab。這使其成為一個通用的工具,可以適應許多不同的開發工作流程。

如何將我的包遷移到 Verdaccio?

將您的包遷移到 Verdaccio 與將它們發佈到 Verdaccio 註冊表一樣簡單。您可以通過登錄到您的 Verdaccio 註冊表並使用 npm publish 命令來完成此操作。

我可以在團隊環境中使用 Verdaccio 嗎?

當然可以。 Verdaccio 旨在在團隊環境中工作。您可以控制誰可以訪問哪些包,使其成為協作的絕佳工具。

如何為 Verdaccio 做出貢獻?

Verdaccio 是一個開源項目,隨時歡迎貢獻。您可以通過報告錯誤、建議功能、改進文檔或提交拉取請求來做出貢獻。

以上是帶有Verdaccio的主機,發布和管理私人NPM軟件包的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板