為什么需要搭建私有 npm
-搭建公司內(nèi)部中臺(tái)做鋪墊,代碼屬于公司資產(chǎn)
-團(tuán)隊(duì)內(nèi)部使用一些待完善package半成品
-內(nèi)部使用更安全
-下載package更快,權(quán)限可配置
包管理的私服工具選型
maven:更偏向后臺(tái)使用
cnpm: 需要安裝MySQL,配置比較麻煩
Verdaccio 是一個(gè) Node.js創(chuàng)建的輕量的私有 npm proxy registry, forked 于 sinopia@1.4.0
1.與 yarn, npm 和 pnpm 100% 兼容
2.提供 Docker 和 Kubernetes 支持,相當(dāng)容易安裝和使用
3.發(fā)布的包是私有的并且訪問權(quán)限可配置
4.Verdaccio 按需要緩存所有相關(guān)項(xiàng),并在當(dāng)?shù)鼗蛩接芯W(wǎng)絡(luò)下可以加速安裝
服務(wù)器搭建
1.安裝node
2.安裝verdaccio
npm install -g verdaccio --unsafe-perm
加上--unsafe-perm選項(xiàng)是為了防止gyp ERR! permission denied權(quán)限問題報(bào)錯(cuò)
3.啟動(dòng)verdaccio
verdaccio
執(zhí)行結(jié)果如下:
[root@webserver ~]# 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.10.0
從控制臺(tái)的輸出,我們可以看到:
verdaccio的配置文件路徑在/root/.config/verdaccio/config.yaml和默認(rèn)訪問地址http://localhost:4873/
在配置文件末尾增加listen: 0.0.0.0:4873保存
# you can specify listen address (or simply a port)
listen: 0.0.0.0:4873
查看修改配置文件
// 進(jìn)入verdaccio目錄
[root@webserver ~]# cd /root/.config/verdaccio/
[root@webserver verdaccio]# ls
config.yaml storage
-- 查看該目錄下的文件,該目錄下默認(rèn)有兩個(gè)文件:config.yaml和storage,添加用戶之后會(huì)自動(dòng)創(chuàng)建htpasswd
// 查看配置文件
[root@webserver ~]# vim config.yaml
storage: ./storage
auth:
htpasswd:
file: ./htpasswd
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs
'**':
proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
在配置文件config.yaml末尾加入代碼:
# you can specify listen address (or simply a port)
listen: 0.0.0.0:4873
配置
在當(dāng)前用戶的 .config/verdaccio 下默認(rèn)有兩個(gè)文件:config.yaml 和 htpasswd。這里介紹兩個(gè)比較重要的配置項(xiàng),其他的可以官網(wǎng)上查詢。
- htpasswd
這個(gè)文件需要?jiǎng)?chuàng)建了賬號(hào)才會(huì)出現(xiàn)在當(dāng)前目錄
npm adduser --registry http://localhost:4873
Username: xxx
Password:
Email: (this IS public) xxx@xxx.com
Logged in as slweb on http://localhost:4873/. #看到這個(gè)代表成功了
[root@webserver verdaccio]# ls
config.yaml htpasswd storage
#這時(shí)就出現(xiàn)了htpasswd。然后修改vim config.yaml
[root@webserver verdaccio]# vim config.yaml
auth:
htpasswd:
file: ./htpasswd
# Maximum amount of users allowed to register, defaults to "+inf".
# You can set this to -1 to disable registration.
# max_users: 1000
max_users: -1 # 禁止注冊(cè)
下面將使用插件注冊(cè)
[root@webserver verdaccio]# sinopia-adduser
username:
注冊(cè)成功
[root@webserver verdaccio]# cat htpasswd
slweb:xxxOkg:autocreated 2020-12-23T08:36:36.974Z
slweb:{SHA}xxxqUE=:autocreated 2020-12-23T08:37:50.637Z
- url可以配置成淘寶鏡像地址:https://registry.npmjs.org/
- 權(quán)限配置(一般團(tuán)隊(duì)或者公司的私有項(xiàng)目,會(huì)采用不同的權(quán)限控制。)
操作權(quán)限: - access 表示哪一類用戶可以對(duì)匹配的項(xiàng)目進(jìn)行安裝(install)
- publish 表示哪一類用戶可以對(duì)匹配的項(xiàng)目進(jìn)行發(fā)布(publish)
- proxy 如其名,這里的值是對(duì)應(yīng)于 uplinks 的
組權(quán)限: - all 表示所有人都可以執(zhí)行對(duì)應(yīng)的操作
- authenticated 表示只有通過驗(yàn)證的人可以執(zhí)行對(duì)應(yīng)操作
- anonymous 表示只有匿名者可以進(jìn)行對(duì)應(yīng)操作(通常無用)
例子:
packages:
# scoped 包
'@scope/*':
access: $all
publish: $all
proxy: server2
'supersecret-*':
# 添加多個(gè)組
access: secret super-secret-area ultra-secret-area
publish: secret ultra-secret-area
proxy: server1
'private-*':
# private-xxx 允許所有的用戶安裝、認(rèn)證的用戶發(fā)布
access: $all
publish: $authenticated
proxy: uplink1
'old-*': # 不設(shè)置 `access`、`publish` 阻止對(duì)一組包的訪問(不設(shè)置proxy阻止代理一組特定包)
'**':
# 允許所有用戶 (包括為驗(yàn)證的用戶) 安裝和發(fā)布
access: $all
publish: $all
proxy: uplink2
設(shè)置權(quán)限賬號(hào)(安裝插件完成)
npm install htpasswd-for-sinopia -g
4.使用pm2啟動(dòng)verdaccio
安裝pm2
npm install -g pm2 --unsafe-perm
使用pm2啟動(dòng)verdaccio,以保證進(jìn)程一直處于打開狀態(tài)
pm2 start verdaccio
5、訪問搭建好的私有倉庫
在瀏覽器中打開http://47.107.60.51:4873 鏈接
注意:在阿里云服務(wù)器添加安全組,開放 4873 端口號(hào),如果沒有添加該端口安全組則不能在瀏覽器正常訪問http://47.107.60.51:4873