現代軟體開發領域中,套件管理日益重要。JavaScript的生態體系,尤其是NPM,已成為這方面的核心部分。大多數開發者傾向於利用公開的NPM儲存庫,輕鬆地下載和更新所需套件。然而,將所有套件全面公開并非總是最佳策略。這就凸顯了私有NPM儲存庫的重要性,而這背後的理由,對不同企業的特定需求和情境將更為明確。
為何我們需要私有NPM儲存庫?
NPM儲存庫是一個集中存儲和分享各種JavaScript套件的平台。由於我們所熟知的NPM儲存庫是公開的,所以全球的開發者都可以隨意下載或上傳套件。那麼,私有NPM儲存庫的必要性在哪裡呢?
1. 保護企業的機密資料
許多企業會將其業務邏輯或專屬技術轉化為套件進行管理。這些套件中可能包含了企業的核心技術或創新思維,若將其公開,很可能損及企業的競爭力。藉由私有NPM儲存庫,企業可以確保這些關鍵套件的安全,並在內部進行分享和使用。
2. 精確的訪問控制
不同的專案或團隊可能對套件和訪問權限有不同的需求。通過使用私有NPM儲存庫,企業能夠對特定套件實行細緻的訪問控制,從而預防不必要的訪問或變更。
3. 穩定性與高效能
由於公開的NPM儲存庫需要為全球的大量使用者提供服務,它可能偶爾會遭遇網路延遲或停機。相反,私有NPM儲存庫在企業的內部網路上運行,能夠以更高的速度安裝或發布套件,並且能夠提供更為穩定的服務。
總之,私有NPM儲存庫為企業提供了一種保護其核心資訊、進行精確訪問控制,並確保穩定性的策略,即便是初學者也能通過這些理由深刻理解其重要性。
利用Verdaccio建立私有NPM儲存庫
Verdaccio是一款以Node.js編寫的輕量級npm私有儲存庫,無論在哪裡,都可以方便地安裝和運行。Verdaccio還可作為公開npm儲存庫的快取,即使在斷網的情況下,也能夠繼續使用已下載的套件。讓我們進一步探討如何使用Verdaccio來建立私有NPM儲存庫。
Verdaccio 安裝方法
您可以透過 npm 全局安裝 Verdaccio。
npm install -g verdaccio
啟動 Verdaccio 伺服器
使用以下的指令啟動 Verdaccio 伺服器。
verdaccio
當伺服器運行後,您可以通過 http://localhost:4873 進行訪問。

使用者註冊與登入
Verdaccio 預設在發布軟體包前需要用戶認證。
npm adduser --registry http://localhost:4873
npm login --registry http://localhost:4873
npm logout --registry http://localhost:4873
發布軟體包
轉至您的項目文件夾,然後在 package.json 中加入以下的 publishConfig。
{
"publishConfig": {
"registry": "http://localhost:4873"
}
}
然後進行軟體包的發布。
npm publish
安裝軟體包
若要在其他項目中安裝此軟體包,請使用以下命令。
npm install [軟體包名稱] --registry http://localhost:4873
或者,也可以在項目的 .npmrc 文件中加入以下內容,設定為預設的 registry。
registry=http://localhost:4873
如此設定後,僅需 npm install [軟體包名稱] 就可以透過 Verdaccio 安裝軟體包。
設定Verdaccio的config.yaml
Verdaccio私有NPM註冊表的核心在於config.yaml檔案。透過此檔案,我們可以精確地定義及調整Verdaccio的運作模式、使用者權限以及套件的存取規則。以下,我將為初學者介紹基礎的config.yaml設定方式。
檔案位置
當您初次安裝並運行Verdaccio時,預設的config.yaml檔案通常會存放在使用者的主目錄的.config/verdaccio/資料夾下。
基本架構
當您開啟config.yaml檔案,會發現它被劃分為多個部分。每一部分都涵蓋了Verdaccio的某個特定功能或設定。
- storage & packages: 數據存儲方式與套件存取規則設定
- web: 網頁界面相關設定
- auth: 使用者驗證方法設定
- middlewares: 啟動或配置額外功能
- uplinks: 設定至其他註冊表的連接
- logs: 日誌設定
基本設定修改
以下是一些基本設定的修改方法:
修改連接埠
listen: 0.0.0.0:6000
此設定將指示Verdaccio伺服器在6000連接埠進行監聽。
設定私有套件
私有套件意指只允許特定的使用者或群組存取或發佈的套件。換句話說,只有經過驗證的使用者可以下載或上傳此類套件。
例如,若您希望將公司的內部專案或某個專屬小組的程式碼以npm套件的形式進行管理,則可以使用此功能。
在config.yaml中,您可以這樣設定以確保特定套件為私有:
packages:
'@mycompany/*':
access: $authenticated
publish: $authenticated
unpublish: $authenticated
此設定將所有名稱以@mycompany/*開頭的套件設定為私有,只允許經過驗證的使用者存取、發佈或刪除。
設定公開套件
公開套件意指任何人都可以存取或下載的套件。但是,發佈或修改套件可能需要驗證。
例如,開放原始碼專案或在公司內廣泛使用的工具套件就可以設定為公開套件。
在config.yaml中,您可以進行以下設定以將所有套件設為公開:
packages:
'**':
access: $all
publish: $authenticated
此設定將允許任何人存取所有套件,但只有經過驗證的使用者可以發佈或修改。
使用外部的npmjs.org
預設上,Verdaccio會連接到npm的官方註冊表npmjs.org。這意味著,當您從Verdaccio請求一個不提供的套件時,它會從npmjs.org下載並提供給您,並將該套件儲存在快取中。
您可以在uplinks部分管理這些外部連接設定。預設設定如下:
uplinks:
npmjs:
url: https://registry.npmjs.org/
通過這些設定,Verdaccio會與npmjs.org連接。如有需要,您也可以在此添加其他外部註冊表連接。
儲存並重新啟動
修改設定後,您需要重新啟動Verdaccio伺服器以使其生效。
私有NPM註冊表已成為當代企業環境中進行軟體開發的重要工具,它確保了開發的安全性和效率。隨著越來越多的組織意識到僅使用公開存儲庫的限制和風險,內部建立自己的套件存儲庫的趨勢正在增加。藉由引入私有NPM註冊表,企業能夠有效地保護其核心技術和資訊,並極大地提高開發效率。因此,引入私有NPM註冊表不僅是一個選擇,更是當代開發環境中的必要策略。