為什麼需要搭建私有 npm
- 私有的包只想在內部使用,還不想用
git+ssh
的方式,感覺不夠優雅,並且還想可以配置相應的許可權 - npm 上的包下載很慢,想把已經下載過的包快取在伺服器上,下次 下載時首先檢查更新,如果沒更新直接走快取
- 希望下載的時候,公共包走公共倉庫,私有包走內部伺服器的私有倉庫
關於 Verdaccio
Verdaccio 是一個 Node.js建立的輕量的私有 npm proxy registry, forked 於 sinopia@1.4.0
。
- 與 yarn, npm 和 pnpm 100% 相容
- 提供 Docker 和 Kubernetes 支援,相當容易安裝和使用
- 釋出的包是私有的並且訪問許可權可配置
- Verdaccio 按需要快取所有相關項,並在當地或私有網路下可以加速安裝
安裝
環境
-
Node
- verdaccio@3.x
Node >= v6.12
- verdaccio@4.x
Node >= v8.x
- verdaccio@3.x
-
npm >=4.x 或者 yarn
官方強烈推薦包管理器版本
> npm@5.x | yarn@1.x | pnpm@2.x
-
web 應用支援瀏覽器
Chrome, Firefox, Edge 和 IE11以上
命令列安裝
npm
全域性安裝
npm install -g verdaccio
複製程式碼
或者使用 yarn
yarn global add verdaccio
複製程式碼
使用
安裝好後需要命令列執行
$> verdaccio
warn --- config file - /home/.config/verdaccio/config.yaml
warn --- http address - http://localhost:4873/ - verdaccio/3.0.0
複製程式碼
然後開啟瀏覽器 訪問地址 http://localhost:4873/ 正常顯示即成功, 4873是預設埠。
另外建議安裝 nrm
方便管理 npm 源。
npm i -g nrm
複製程式碼
安裝好後
nrm add verdaccio http://localhost:4873/ # 新增源
nrm use verdaccio # 更換源
複製程式碼
然後就是新增使用者,登入就可以釋出、安裝了。
配置
在當前使用者的 .config/verdaccio
下預設有兩個檔案:config.yaml
和 htpasswd
。這裡介紹兩個比較重要的配置項,其他的可以官網上查詢。
許可權配置
一般團隊或者公司的私有專案,會採用不同的許可權控制。
操作許可權:
access
表示哪一類使用者可以對匹配的專案進行安裝(install)publish
表示哪一類使用者可以對匹配的專案進行釋出(publish)proxy
如其名,這裡的值是對應於 uplinks 的
組許可權:
$all
表示所有人都可以執行對應的操作$authenticated
表示只有通過驗證的人可以執行對應操作$anonymous
表示只有匿名者可以進行對應操作(通常無用)
瞭解這幾項配置後就能很簡單地使用 verdaccio 的許可權控制了
packages:
# scoped 包
'@scope/*':
access: $all
publish: $all
proxy: server2
'supersecret-*':
# 新增多個組
access: secret super-secret-area ultra-secret-area
publish: secret ultra-secret-area
proxy: server1
'private-*':
# private-xxx 允許所有的使用者安裝、認證的使用者釋出
access: $all
publish: $authenticated
proxy: uplink1
'old-*': # 不設定 `access`、`publish` 阻止對一組包的訪問(不設定proxy阻止代理一組特定包)
'**':
# 允許所有使用者 (包括為驗證的使用者) 安裝和釋出
access: $all
publish: $all
proxy: uplink2
複製程式碼
賬號配置
因為是私有源,我們可以設定 config.yaml
中的 max_users: -1
來禁用 npm adduser 命令來建立使用者。如果需要新增使用者這裡介紹兩種方法:
-
可以通過安裝 htpasswd-for-sinopia 來新增賬號
$ npm install htpasswd-for-sinopia -g $ sinopia-adduser # 在 htpasswd 目錄下執行 複製程式碼
然後就是根據提示填寫賬號密碼就行。
-
verdaccio 的認證是基於 verdaccio-htpasswd, 可以通過官方提供的工具來生成 www.htaccesstools.com/htpasswd-ge…,將生成的段字串新增到
htpasswd
中即可。
部署
可以使用forever、pm2或其他的守護程式進行管理。
$ npm i -g pm2 # 安裝
$ pm2 start `which sinopia` #啟動
複製程式碼
nginx 配置:
server {
listen 80 default_server;
location / {
proxy_pass http://127.0.0.1:4873/;
proxy_set_header Host $host;
}
}
複製程式碼
寫在最後
- 儘量不要再使用 sinopia 了會有各種坑,具體可以自己實驗。
- 有問題可以在 stackoverflow 上提問,官方維護者非常友好,回覆效率特別快。