本文更多的是記錄使用過程當中的坑,關於具體的搭建方式,參考文章中寫得很詳細了,本文就再也不過多的贅述了。html
what is verdaccio? 這個是官方介紹的網址,權威且全面。node
Verdaccio 是一個 Node.js建立的輕量的私有npm proxy registry
它forked於sinopia@1.4.0而且100% 向後兼容。
Verdaccio 表示意大利中世紀晚期fresco 繪畫中流行的一種綠色的意思。
sinopia是最初的搭建私有npm的選擇,不過已經好多年不維護了,而verdaccio則是從sinopia
衍生出來而且一直在維護中的,因此如今看來,verdaccio是一個更好的選擇。git
搭建教程
搭建教程2
關於搭建方式,上面兩篇文章已經寫的很是清楚了,這裏只是簡單的記錄一下大致流程,方便之後快速查閱:github
#當前版本是3.8.6
#首次執行會打印出配置文件config.yaml的位置
listen: 0.0.0.0:4873
內容,方便其餘人能夠經過IP:PORT的方式訪問到你的私有NPM好了,一個私有的NPM就已經搭建完成了,是否是很快。npm
如何向私有NPM中發佈包?json
npm config set registry= http://IP:PORT/#配置文件中的listen字段
npm login#在config.yaml的默認配置中,登錄用戶才能夠進行publish操做
npm publish#到你須要發佈的包的package.json文件的同級目錄下執行
npm login
和npm adduser
命令是等效的,若是是第一次登錄,且用戶名不存在衝突,那麼登錄信息會在進行加密處理後,存入和config.yaml文件同級的htpasswd
文件中。如何設置特定用戶才能擁有發佈權限?
上面提到,用戶須要先登錄,才能夠執行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操做。安全
如何保證本身的私有包不會被髮布到外部倉庫中去?
利用package.json文件的配置項目,咱們有兩個方式能夠作到:負載均衡
"private": true
,這個設置能夠保證這個包不會被髮布,不過若是這樣作的話,它既不能發佈到外部倉庫,也不能發佈到你指定的倉庫中去了。publishConfig
,這個設置能夠指定發佈路徑,當你使用npm publish命令進行發佈操做的時候,這個字段中的配置項會覆蓋掉你本地設置的registry地址,強制將你的包發佈到你指定的私有倉儲中去。"publishConfig": { "registry": "http://IP:4873/" },
是否能夠手動修改私有NPM包的內容?不能夠
工具
shasum
的字段,記錄了一個上傳的時候生成的根據包裏面的文件內容而計算出來的序列號,若是手動修改了文件內容,可是沒有修改對應的shasum
字段內容就會致使不匹配報錯,沒法install。我以爲這個應該也是npm出於安全考慮的一個手段吧。pm2 start verdaccio
是無法成功將verdaccio跑起來的,應該是執行腳本無法正常解析的鍋,之前就有人給verdaccio提了issues,不過彷佛尚未結論。nrm add local http://ip:port
爲咱們本地的私有倉庫添加別名,而後就可使用nrm use local
進行快速切換,而不再用去記錄IP和端口了。