npm私有庫服務
簡介
公司出於自身隱私保護需要,不想把自己的程式碼開源到包管理區,但是又急需一套完整包管工具,來管理越來越多的元件、模組和專案。對於前端,最熟悉的莫過於npm,bower等;但是bower的市場相容性明顯沒有npm強壯,加之commonjs規範的日益成熟。npm應該是前端包管理的不二選擇。
公司對於搭建本地私有npm庫有如下要求:
- 私有包託管在內部伺服器中
- 專案中使用了公共倉庫上的公共包,也使用了內部伺服器上的私有包
- 希望下載的時候,公共包走公共倉庫,私有包走內部伺服器的私有倉庫
- 伺服器硬碟有限,希望只快取下載過的包,而不是全部同步。
- 對於下載,釋出npm包有對應的許可權管理,安裝方便,配置簡單,依賴少。
安裝私有包流程
服務搭建
node + npm + verdaccio + pm2 + nrm
Sinopia Verdaccio是一個零配置的私有的帶快取功能的npm包管理工具
PS: Sinopia多年未更新,Verdaccio是基於Sinopia重構的,注入了更多活力
# config
$ /home/ubuntu/.config/verdaccio/config.yaml
# password
$ /home/ubuntu/web_npm/verdaccio/htpasswd
# storage
$ /home/ubuntu/web_npm/verdaccio/storage
複製程式碼
pm2 託管Sinopia程式可以保證程式永遠存活 nrm 便於檢視和切換當前使用的registry verdaccio-delegated-auth 是為了讓服務支援自定義驗證的外掛
標準定製
# Sinopia config.yaml
# path to a directory with all packages
storage: /home/ubuntu/web_npm/verdaccio/storage
auth:
# htpasswd:
# file: ./htpasswd
# max_users: -1
# mix_users: 1000
delegated-auth:
url: https://your-account-server/
user_key: name # username field, default: username
pwd_key: password # password field, default: password
# a list of other known repositories we can talk to
uplinks:
npmjs:
url: http://registry.npm.taobao.org/
packages:
'@company/*':
# scoped packages
access: $authenticated
publish: $authenticated
'*':
# keywords: "$all", "$anonymous", "$authenticated"
access: $all
publish: $all
proxy: npmjs
# log settings
logs:
- {type: stdout, format: pretty, level: http}
#- {type: file, path: sinopia.log, level: info}
listen: 0.0.0.0:4873
複製程式碼
為避免客戶端建立虛假使用者、或失誤建立使用者,會關閉註冊使用者功能已經為verdaccio編寫自定義驗證外掛,使用自己的賬戶系統的使用者名稱和密碼進行登入驗證verdaccio-delegated-authmax_users: -1
,採用服務端提供使用者賬戶配置file: ./htpasswd
的方式新增使用者。- 公司內部發布包到私有服務需要加上字首
@company/${app}
,例如@company/lodash
。字首包@company/*
必須經過賬戶驗證後才能正常執行安裝或釋出。(company
指公司名稱) - 釋出內部私有包必須有專案自述README,內容必須包含:
- 基本描述
- 使用方式
- 原始碼地址
客戶端使用
- 安裝
nrm
新增私有服務代理,使用自己的賬戶系統賬號登入使用。
$ nrm add company http://126.*.*.99:4873/
$ nrm use company
$ npm login
複製程式碼
- 瀏覽器訪問私有服務,檢視所有內部私有包。
安全
閘道器
更多
Github: github.com/yansenlei