如何通過 npm 私服解鎖新姿勢

如何通過 npm 私服解鎖新姿勢

本文講解了爲什麼需要搭建私有註冊表,以及註冊表的搭建方式選擇、搭建步驟、使用。

爲需要需要搭建私服?

  • 獲得更快的依賴安裝速度
    作爲前端 node 現在已經必不可少,但 node 的生態都在 npm 上,可是官方的 npm 註冊表地址 https://registry.npmjs.org/ 在國內訪問不但很慢,而且可能直接不通。如果是這種情況我們一般通過第三方鏡像可以解決問題。但是衆所周知,第三方鏡像是有一些延遲問題的,出於成本問題,三方基本不會實時或全量同步所有依賴。

  • 內部工具或代碼
    公司內部可能會開發一些工具,這些工具不能公開在公共註冊表裏。

  • 進行依賴測試
    當自己在開發一些工具,需要進行小範圍測試。這時候一般是不能發佈到公共註冊表上去的。因爲發佈上去之後可以導致自己的原型想法泄露、或由於工具沒有達到使用標準,這時候別人使用之後可能會帶來麻煩。還有一個比較嚴重的問題會大大佔用公共資源。

npm 官方註冊表上每個包名都是唯一且獨有的,並且發佈超過 24 小時之後就不能刪除。那這時候你寫個 hello world 程序,啥用也沒有,卻把坑位給佔用了,這就很過分。

如何選擇私服搭建工具

產生根據自己的需求。像本文面向的是人員應該是前端比較多,所以會選擇前端比較熟悉的方式。

常見的私服搭建搭建工具以及方式:

  • nexus 可能搭建 npm 之外的其他私服, 通過界面或 xml 進行配置, 看起來對 java 人員比較受用.
  • verdaccio 就是一個 node 包, 像前端平常一樣 npm i 就能使用.
  • cnpmjs 淘寶的 cnpm 就是基於它實現, 搭建它需要安裝數據庫或 docker.

通過以上簡單的比較, 發現 verdaccio 比較適合:

  • 熟悉, node.js 技術棧, npm i -g 就能用
  • 輕量, 0 配置, 不需要數據庫
  • 夠用, 支持發佈私有包, 覆蓋公共包

如何安裝私服工具

上面我們選擇了 verdaccio, 那麼我們就來使用它.
這裏使用 [email protected] 進行演示, 要求的 [email protected]

安裝

cnpm i -g verdaccio@5

2022-03-18-16-50-14

啓動

verdaccio
 warn --- config file  - C:/Users/admin/AppData/Roaming/verdaccio/config.yaml
 warn --- Plugin successfully loaded: verdaccio-htpasswd
 warn --- Plugin successfully loaded: verdaccio-audit
 warn --- http address - http://localhost:4873/ - verdaccio/5.8.0

2022-03-18-16-53-18

啓動成功, 控制能出現一個鏈接: http://localhost:4873/ , 這個就是私有鏡像地址.

下面我們來使用這個鏡像隨便安裝一個好用的接口模擬工具 mockm 試試看:

嘗試使用私有鏡像

npm i -g mockm --registry=http://localhost:4873/

2022-03-18-16-56-04

可以發現在安裝的過程中,左邊的控制檯是鏡像的日誌. 通過日誌我們知道, 安裝時是先去官方註冊表上去下載的.

這個沒毛病, 可以理解. 我們下什麼給我們存什麼, 這樣就避免磁盤空間被佔滿了, 很好.

後面我們再下的時候, 就直接從我們自己的服務器上返回給我們了.

看看安裝之後的效果

看起來是安裝成功了, 沒毛病. 正在我們來看看安裝成果:

# 啓動剛剛安裝的 mockm
mockm

2022-03-18-17-03-33

沒有問題, 一切都很完美.

擴展: 轉發私服

在公司裏面, 一些情況下可能 verdaccio 啓動的服務是有防火牆禁止的.

如果要新開端口, 可能需要走很麻煩的審批流程.

爲了避免這種這個流程, 我們可以把 verdaccio 服務嫁接在已有的服務上.

我這邊已有的服務是 http://127.0.0.1:9000/, 是通過 mockm 啓動的:

我們要實現訪問 http://127.0.0.1:9000/ivp/npm 時訪問我們的 verdaccio 服務. 只需添加如下配置即可:

{
  "/ivp/npm": "http://127.0.0.0:4873"
}

2022-03-18-17-57-56

有個地方需要注意, 由於我們這裏是代理到子目錄下, 但 verdaccio 的前端靜態文件是相對於根服務的.

設置環境變量 VERDACCIO_PUBLIC_URL 啓動即可:

VERDACCIO_PUBLIC_URL=http://127.0.0.1:9000/ivp/npm/ verdaccio --listen 0.0.0.0:4873

當然, 我們也可以順手加上進程守護:

VERDACCIO_PUBLIC_URL=http://127.0.0.1:9000/ivp/npm/ pm2 start verdaccio -- --listen 0.0.0.0:4873

2022-03-18-18-03-23

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章