npm私有庫服務搭建及規範定製

Leiys發表於2018-12-18

npm私有庫服務


簡介

公司出於自身隱私保護需要,不想把自己的程式碼開源到包管理區,但是又急需一套完整包管工具,來管理越來越多的元件、模組和專案。對於前端,最熟悉的莫過於npm,bower等;但是bower的市場相容性明顯沒有npm強壯,加之commonjs規範的日益成熟。npm應該是前端包管理的不二選擇。

公司對於搭建本地私有npm庫有如下要求:

  1. 私有包託管在內部伺服器中
  2. 專案中使用了公共倉庫上的公共包,也使用了內部伺服器上的私有包
  3. 希望下載的時候,公共包走公共倉庫,私有包走內部伺服器的私有倉庫
  4. 伺服器硬碟有限,希望只快取下載過的包,而不是全部同步。
  5. 對於下載,釋出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
複製程式碼
  1. 為避免客戶端建立虛假使用者、或失誤建立使用者,會關閉註冊使用者功能max_users: -1,採用服務端提供使用者賬戶配置file: ./htpasswd的方式新增使用者。 已經為verdaccio編寫自定義驗證外掛,使用自己的賬戶系統的使用者名稱和密碼進行登入驗證verdaccio-delegated-auth
  2. 公司內部發布包到私有服務需要加上字首@company/${app},例如@company/lodash。字首包@company/*必須經過賬戶驗證後才能正常執行安裝或釋出。(company指公司名稱)
  3. 釋出內部私有包必須有專案自述README,內容必須包含:
    • 基本描述
    • 使用方式
    • 原始碼地址

客戶端使用

  1. 安裝nrm新增私有服務代理,使用自己的賬戶系統賬號登入使用。
$ nrm add company http://126.*.*.99:4873/
$ nrm use company
$ npm login
複製程式碼
  1. 瀏覽器訪問私有服務,檢視所有內部私有包。

安全

閘道器

更多

Github: github.com/yansenlei

相關文章