Verdaccio:輕鬆管理私有npm包的利器
核心要點
本文經 Panayiotis «pvgr» Velisarakos 和 Jurgen Van de Moere 審核。感謝所有 SitePoint 的同行評審員,使 SitePoint 內容盡善盡美!
眾所周知,npm及其註冊表是事實上的 JavaScript 包管理器,也是全球最大的代碼集合。但有時在開發令人驚豔的新包時,您需要額外的隱私保護。無論是公司項目(不應公開共享)、碩士/學士論文項目,還是僅僅因為您像我一樣,有時會為自己在新主題上的最初嘗試感到羞愧。
無論出於何種原因,都有多種選擇。也許最簡單的方法是註冊 npm 的一項商業服務,然後就可以開始了。但這需要付費,可能並不適合每個人的錢包。
幸運的是,有一個名為 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 是一個 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 來訪問註冊表瀏覽器。
服務器啟動時,會自動創建一個名為 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 文件,用於存儲您的登錄名和憑據。
現在,我們準備創建我們的第一個私有包。我們將創建一個簡單的 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/,您將看到列表中包含新的包。
現在我們已經發布了我們的私有包,讓我們創建一個簡單的演示應用程序來使用它。
在一個新文件夾 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 註冊表,允許您私下託管您自己的 NPM 包。對於想要控制其代碼和依賴項的開發人員來說,這是一個很好的工具。 Verdaccio 提供了一種安全有效的方式來管理 NPM 包,允許您緩存包、控制訪問,甚至在主 NPM 註冊表宕機時將其用作後備選項。
安裝 Verdaccio 非常簡單。您需要在系統上安裝 Node.js 和 npm。安裝完成後,您可以使用 npm install 命令安裝 Verdaccio:npm install -g verdaccio。這將在您的系統上全局安裝 Verdaccio。
安裝 Verdaccio 後,您可以通過首先使用 npm login 命令登錄到您的 Verdaccio 註冊表來發布您的私有 NPM 包。系統將提示您輸入您的用戶名、密碼和電子郵件。登錄後,導航到您的包目錄並使用 npm publish 命令發布您的包。
Verdaccio 允許您通過其配置文件 config.yaml 來控制對私有 NPM 包的訪問權限。您可以指定誰可以訪問、發布和取消發布包。您還可以創建用戶組並將權限分配給這些組。
是的,Verdaccio 可以充當公共 NPM 包的代理和緩存。這意味著,當您安裝包時,Verdaccio 將首先檢查它在其存儲中是否可用。如果不可用,它將從公共 NPM 註冊表獲取它並將其緩存以備將來使用。
您可以通過在 .npmrc 文件中將其設置為您的主要註冊表來配置 Verdaccio 以充當後備選項。這樣,每當主 NPM 註冊表宕機時,npm 將自動使用 Verdaccio。
是的,Verdaccio 可以與各種工具集成,例如 Docker、Kubernetes 和 GitLab。這使其成為一個通用的工具,可以適應許多不同的開發工作流程。
將您的包遷移到 Verdaccio 與將它們發佈到 Verdaccio 註冊表一樣簡單。您可以通過登錄到您的 Verdaccio 註冊表並使用 npm publish 命令來完成此操作。
當然可以。 Verdaccio 旨在在團隊環境中工作。您可以控制誰可以訪問哪些包,使其成為協作的絕佳工具。
Verdaccio 是一個開源項目,隨時歡迎貢獻。您可以通過報告錯誤、建議功能、改進文檔或提交拉取請求來做出貢獻。
以上是帶有Verdaccio的主機,發布和管理私人NPM軟件包的詳細內容。更多資訊請關注PHP中文網其他相關文章!