NPM 介紹
npm 為你和你的團(tuán)隊(duì)打開(kāi)了連接整個(gè) JavaScript 天才世界的一扇大門。它是世界上最大的軟件注冊(cè)表,每星期大約有 30 億次的下載量,包含超過(guò) 600000 個(gè) 包(package) (即,代碼模塊)。來(lái)自各大洲的開(kāi)源軟件開(kāi)發(fā)者使用 npm 互相分享和借鑒。包的結(jié)構(gòu)使您能夠輕松跟蹤依賴項(xiàng)和版本。
私有 NPM
需求背景
平時(shí)在項(xiàng)目工作中可能會(huì)用到很多通用性的代碼,比如,框架類、工具類以及公用的業(yè)務(wù)邏輯代碼等等,通過(guò)打包發(fā)布到 npm 中央倉(cāng)庫(kù)或者私有倉(cāng)庫(kù),來(lái)進(jìn)行維護(hù)和托管代碼,方便公用代碼的使用,如果涉及到不方便公開(kāi)的代碼組件可以發(fā)布到私有倉(cāng)庫(kù)。
私有 npm 組件庫(kù)的優(yōu)勢(shì)
- 私有 npm 包只對(duì)公司內(nèi)部局域網(wǎng)開(kāi)放
- 速度比直接在 npm 下載包更快,也比使用淘寶鏡像快,畢竟是在公司內(nèi)部局域網(wǎng)
- 對(duì)于發(fā)布和下載 npm 包可以配置權(quán)限管理
同類產(chǎn)品對(duì)比
在研究搭建 npm 私有組件倉(cāng)庫(kù)時(shí),查閱了很多相關(guān)方面的資料,有使用 maven 包管理的私服工具 nexus 搭建私有倉(cāng)庫(kù)的,也有使用阿里的 cnpm 搭建私有倉(cāng)庫(kù)的,還有使用 sinopia 和 verdaccio 搭建私有倉(cāng)庫(kù)的,下面介紹一下它們的主要區(qū)別:
- 使用 maven 包管理的私服工具 nexus 搭建私有倉(cāng)庫(kù),這種方式功能強(qiáng)大,但更偏向后臺(tái)使用,服務(wù)端的同學(xué)應(yīng)該比較熟悉
- 阿里的 cnpm 搭建 npm 私有倉(cāng)庫(kù),這個(gè)是阿里自己內(nèi)部也在使用的,應(yīng)該也挺好用,不過(guò)需要安裝 MySQL 數(shù)據(jù)庫(kù),而且配置比較麻煩
- 使用 sinopia 搭建 npm 私有倉(cāng)庫(kù),這個(gè)使用比較簡(jiǎn)單,而且不用配置數(shù)據(jù)庫(kù),但是這個(gè) github 項(xiàng)目好像三四年都沒(méi)有人維護(hù)了
經(jīng)過(guò)查閱相關(guān)資料后對(duì)比,最后選擇使用 verdaccio 來(lái)搭建 npm 私有倉(cāng)庫(kù),這個(gè) github 項(xiàng)目是 sinopia 的分支,用法和 sinopia 差不多。
原文: https://liaolongdong.com/2019/01/24/build-private-package.html
Verdaccio
簡(jiǎn)介
Verdaccio - 輕量級(jí)私有 npm 代理注冊(cè)表
安裝與部署
系統(tǒng)與環(huán)境
- 系統(tǒng) CentOS 7.7
- 環(huán)境 node v12.13.0
- 部署 PM2 (一個(gè)帶有負(fù)載均衡功能的 Node 應(yīng)用的進(jìn)程管理器。)
安裝
npm install --global verdaccio --unsafe-perm
,因?yàn)槲覀兪褂玫氖?root 用戶,所以需要加上--unsafe-perm
參數(shù)
啟動(dòng)
終端運(yùn)行 verdaccio
[root@svrcnyapi ~]# verdaccio
*** WARNING: Verdaccio doesn't need superuser privileges. Don't run it under root! ***
warn --- config file - /root/.config/verdaccio/config.yaml
warn --- Verdaccio started
warn --- Plugin successfully loaded: verdaccio-htpasswd
warn --- Plugin successfully loaded: verdaccio-audit
warn --- http address - http://localhost:4873/ - verdaccio/4.3.4
此時(shí),verdaccio 服務(wù)已經(jīng)啟動(dòng),但是此時(shí)只能通過(guò) http://localhost:4873
訪問(wèn),為此,我們需要對(duì)配置進(jìn)行修改:
vi /root/.config/verdaccio/config.yaml
在配置末尾添加:
listen:
0.0.0.0:4873
終端重新運(yùn)行 verdaccio
[root@svrcnyapi ~]# verdaccio
*** WARNING: Verdaccio doesn't need superuser privileges. Don't run it under root! ***
warn --- config file - /root/.config/verdaccio/config.yaml
warn --- Verdaccio started
warn --- Plugin successfully loaded: verdaccio-htpasswd
warn --- Plugin successfully loaded: verdaccio-audit
warn --- http address - http://0.0.0.0:4873/ - verdaccio/4.3.4
此時(shí),我們可以通過(guò)對(duì)應(yīng)部署的服務(wù)器 ip,訪問(wèn)其網(wǎng)站,例如:http://ip:4873
上述啟動(dòng)方式過(guò)于簡(jiǎn)單,并且不能做到一直啟動(dòng)、開(kāi)機(jī)自啟動(dòng)等功能,所以這是我們采用 pm2 來(lái)管理:
部署
安裝
npm install -g pm2
執(zhí)行
pm2 start verdaccio
┌────┬─────────────────────────┬─────────┬─────────┬──────────┬────────┬──────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ version │ mode │ pid │ uptime │ ? │ status │ cpu │ mem │ user │ watching │
├────┼─────────────────────────┼─────────┼─────────┼──────────┼────────┼──────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 1 │ verdaccio │ N/A │ fork │ 13439 │ 0s │ 0 │ online │ 0% │ 8.9mb │ root │ disabled │
│ 0 │ yapi_v1.8.5 │ 1.8.5 │ fork │ 2436 │ 2D │ 0 │ online │ 0% │ 70.6mb │ root │ disabled │
└────┴─────────────────────────┴─────────┴─────────┴──────────┴────────┴──────┴──────────┴──────────┴──────────┴──────────┴──────────┘
保證一直運(yùn)行、開(kāi)機(jī)自啟,依次執(zhí)行以下命令
pm2 save
獲取當(dāng)前運(yùn)行的 Node 應(yīng)用程序的快照
pm2 startup
產(chǎn)生 init 腳本 保持進(jìn)程活著
至此,我們就擁有了一個(gè)穩(wěn)定的私有 NPM 注冊(cè)中心。
NPM 發(fā)布相關(guān)操作命令,詳見(jiàn) npm 發(fā)布包教程
設(shè)置 npm 源
npm set registry http://ip:4873
設(shè)置當(dāng)前 npm 源為私有 npm 庫(kù)
注冊(cè)
npm adduser --registry http://ip:4873
依次輸入 npm 賬號(hào)用戶名、密碼和郵箱
登錄
npm login
Username: gac
Password:
Email: (this IS public) gac@xxx.com
Logged in as gac on http://ip:4873/.
發(fā)布
進(jìn)入將要發(fā)布的項(xiàng)目根目錄,輸入命令:
npm publish --registry http://ip:4873
npm notice === Tarball Details ===
npm notice name: @demo/test
npm notice version: 1.0.0
npm notice package size: 5.7 MB
npm notice unpacked size: 8.7 MB
npm notice shasum: 33d09bf57d034a09dffd982bb9b5811063cf73e9
npm notice integrity: sha512-cJOnKk639iNmR[...]E84CkzJUtkfOw==
npm notice total files: 598
npm notice
+ @demo/test@1.0.0
提示成功后,在瀏覽器中刷新 http://ip:4873
頁(yè)面,將會(huì)看到已發(fā)布的 npm 包
下載
之后使用私有倉(cāng)庫(kù)中的 npm 包,就和平時(shí) npm 操作一樣了。會(huì)優(yōu)先私有 npm 庫(kù)中查找,如若找不到,再去其他源查找(可配置多個(gè)外部鏈 uplink ,默認(rèn) npmjs 官方源)
npm 多源管理
nrm - 一個(gè) NPM 源管理器,幫助你在不同 NPM 源中切換。
一般為了保證下載順利,我們需要切換不同的 npm 源,這里推薦 nrm 進(jìn)行管理。
安裝
npm install -g nrm
使用
nrm ls
- 查看當(dāng)前注冊(cè)的 NPM 源列表
nrm ls
npm -------- https://registry.npmjs.org/
yarn ------- https://registry.yarnpkg.com/
cnpm ------- http://r.cnpmjs.org/
* taobao ----- https://registry.npm.taobao.org/
nj --------- https://registry.nodejitsu.com/
npmMirror -- https://skimdb.npmjs.com/registry/
edunpm ----- http://registry.enpmjs.org/
nrm add demo http://ip:4873/
-將我們之前部署的私有庫(kù)加入 nrm,取名“demo”
再次查看 nrm ls
,顯示多出一條
npm -------- https://registry.npmjs.org/
yarn ------- https://registry.yarnpkg.com/
cnpm ------- http://r.cnpmjs.org/
* taobao ----- https://registry.npm.taobao.org/
nj --------- https://registry.nodejitsu.com/
npmMirror -- https://skimdb.npmjs.com/registry/
edunpm ----- http://registry.enpmjs.org/
demo -------- http://ip:4873/
nrm use demo
- 設(shè)置當(dāng)前 npm 源
nrm use demo
Registry has been set to: http://ip:4873/
有了 nrm,我們就可以隨時(shí)切換我們需要的 npm 源了。