verdaccio - 快速搭建私有npm registry的利器

寫在前面

本文更多的是記錄使用過程當中的坑,關於具體的搭建方式,參考文章中寫得很詳細了,本文就再也不過多的贅述了。html

verdaccio 是什麼

what is verdaccio? 這個是官方介紹的網址,權威且全面。node

Verdaccio 是一個 Node.js建立的輕量的私有npm proxy registry
它forked於sinopia@1.4.0而且100% 向後兼容。
Verdaccio 表示意大利中世紀晚期fresco 繪畫中流行的一種綠色的意思。

sinopia是最初的搭建私有npm的選擇,不過已經好多年不維護了,而verdaccio則是從sinopia衍生出來而且一直在維護中的,因此如今看來,verdaccio是一個更好的選擇。git

如何使用verdaccio來搭建私有npm registry

搭建教程
搭建教程2
關於搭建方式,上面兩篇文章已經寫的很是清楚了,這裏只是簡單的記錄一下大致流程,方便之後快速查閱:github

  • npm install -g verdaccio #當前版本是3.8.6
  • verdaccio #首次執行會打印出配置文件config.yaml的位置
  • 修改config.yaml文件,新增listen: 0.0.0.0:4873內容,方便其餘人能夠經過IP:PORT的方式訪問到你的私有NPM
  • 再次啓動 verdaccio 讓新的配置文件內容生效

好了,一個私有的NPM就已經搭建完成了,是否是很快。npm

使用過程當中的經驗記錄

  1. 如何向私有NPM中發佈包?json

    npm config set registry= http://IP:PORT/ #配置文件中的listen字段
    npm login #在config.yaml的默認配置中,登錄用戶才能夠進行publish操做
    npm publish #到你須要發佈的包的package.json文件的同級目錄下執行
    • npm loginnpm adduser命令是等效的,若是是第一次登錄,且用戶名不存在衝突,那麼登錄信息會在進行加密處理後,存入和config.yaml文件同級的htpasswd文件中。
  2. 如何設置特定用戶才能擁有發佈權限?
    上面提到,用戶須要先登錄,才能夠執行publish操做,能夠利用這個默認規則,配合配置文件中的max_users來達到目的。htpasswd文件中每一行內容都會記錄一個登錄用戶的信息,當咱們將max_users設置爲1的時候,若是再有其餘的用戶使用npm login命令是沒法登錄成功的,會報錯:windows

    npm ERR! code E403
    npm ERR! Registry returned 403 for PUT on 
    http://0.0.0.0:4873/-/user/org.couchdb.user:msa: maximum amount of users 
    reached

    這樣,就只有第一個登錄進來的用戶才能夠執行發佈操做,也就等同於限定了publish權限,只被一個用戶佔有。並且,這個用戶是能夠在多臺機器上同時登錄的,也就是說你和你的同事均可以使用這個帳號在同一時間/不一樣機器進行publish操做。安全

  3. 如何保證本身的私有包不會被髮布到外部倉庫中去?
    利用package.json文件的配置項目,咱們有兩個方式能夠作到:負載均衡

    • 設置 "private": true,這個設置能夠保證這個包不會被髮布,不過若是這樣作的話,它既不能發佈到外部倉庫,也不能發佈到你指定的倉庫中去了。
    • 設置publishConfig,這個設置能夠指定發佈路徑,當你使用npm publish命令進行發佈操做的時候,這個字段中的配置項會覆蓋掉你本地設置的registry地址,強制將你的包發佈到你指定的私有倉儲中去。
    "publishConfig": {
       "registry": "http://IP:4873/"
     },
  4. 是否能夠手動修改私有NPM包的內容?
    不能夠工具

    • 實際案例: 有一次爲了快速驗證一個bug,又不想從新上傳,就手動修改了私有NPM倉庫中包裏的文件內容,結果其餘同事經過npm install 去安裝這個包的時候報錯,說是shasum的值不相等,沒法安裝。
    • 原理解析: 私有NPM倉庫中全部包的實際存儲路徑在config.yaml文件的storage字段中配置,到這個路徑下能夠看到全部的私用包,這些包都是被作出了.tgz的壓縮包,和這些同級目錄下的package.json文件中記錄了全部的這些包的信息,包括名稱,版本號,上傳時間等等,其中有一個 shasum的字段,記錄了一個上傳的時候生成的根據包裏面的文件內容而計算出來的序列號,若是手動修改了文件內容,可是沒有修改對應的shasum字段內容就會致使不匹配報錯,沒法install。我以爲這個應該也是npm出於安全考慮的一個手段吧。
  5. 利用pm2工具運行verdaccio
    pm2 是一個nodejs的進程管理工具,內置了負載均衡的功能,很好很強大,but,windows直接執行pm2 start verdaccio是無法成功將verdaccio跑起來的,應該是執行腳本無法正常解析的鍋,之前就有人給verdaccio提了issues,不過彷佛尚未結論。
  6. 利用 nrm 快速切換本機使用的npm倉庫地址
    nrm 是一個npm registry的管理工具,能夠幫助咱們快速的切換本機npm倉庫地址,咱們能夠經過 nrm add local http://ip:port爲咱們本地的私有倉庫添加別名,而後就可使用nrm use local進行快速切換,而不再用去記錄IP和端口了。

參考文章

相關文章
相關標籤/搜索