verdaccio搭建私有npm倉庫

原由

最近在作一個業務組件庫的項目,公司內部又沒有私有的npm倉庫,因此就將組件庫放到gitlab上作版本控制。html

可是放在gitlab的話,管理起來十分麻煩:前端

  • 版本發佈時候,須要構建代碼並推到倉庫中,而後再打tag
  • 項目中安裝的版本時候,須要按gitlab倉庫地址安裝,而且在每次更新時須要手動改tag號

因此,咱們迫切須要一個私有的npm倉庫。node

調研

通過一番搜尋,發現目前大概有三種方式來作私有的npm庫mysql

我在本地前後體驗了 cnpmverdaccio 兩個工具的發佈和部署。nginx

最終選擇使用 verdaccio的緣由:git

  • 輕量化,基本不須要怎麼配置,維護負擔小
  • 小團隊暫時沒有作包緩存的須要(也沒有富餘的機器資源)
  • 官方提供了現成的 docker 鏡像,幾乎能夠一鍵上線
  • dan大佬的好評
docker pull verdaccio/verdaccio
複製代碼

image.png

部署

  1. 配置 docker-compose.yml
version: '3.1'

services:
  xx_npm_registry: # 修改這裏
    image: verdaccio/verdaccio
    container_name: "xx_npm_registry"  # 修改這裏
    ports:
      - "4873:4873" 
    networks:
      - node-network
    # 自定義配置
    volumes:
      - "./storage:/verdaccio/storage"
      - "./config:/verdaccio/conf"
      - "./plugins:/verdaccio/plugins"  
networks:
  node-network:
    driver: bridge
複製代碼
  1. 建立配置文件 ./config/config.yaml
storage: /verdaccio/storage # 文件存儲,默認使用內置本地文件模式存儲

# 帳號與認證
auth:
  htpasswd:
    # 默認使用htpasswd,建立的用戶會添加到本地文件htpasswd中
    file: /verdaccio/conf/htpasswd 

# 上游registry地址配置
uplinks:
  npmjs:
    # 該倉庫沒有的包會去上游registry去獲取
    # 這裏配置爲淘寶的npm registry
    url: https://registry.npm.taobao.org/     
    
# 包下載、發佈限制
packages:
  "@jiedianfe/*":
    access: $all
    publish: $authenticated
  "**":
    access: $all
    publish: $all
    proxy: npmjs

# 日誌
logs:
  - {type: stdout, format: pretty, level: http}

# 私有倉庫前端頁面配置
web:
  enable: true # 啓用前端頁面
  title: xxNPM # 修改這裏
  # logo: logo.png
  # scope:
複製代碼
  1. 配置nginx轉發
server {
  listen 80;
  listen 443 ssl http2;
  server_name npm.xxxx.com; # 修改這裏
  include /etc/nginx/sites-enabled/ssl_certificate;
  location / {
    # xx_npm_registry與docker-compose.yaml中的服務名對應
    proxy_pass              http://xx_npm_registry:4873; 
    
    proxy_set_header        Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-NginX-Proxy true;
    proxy_ssl_session_reuse off;
    proxy_set_header Host $http_host;
    proxy_redirect off;
  }
}
複製代碼
  1. 檢查相應目錄權限

我在本地體驗時,卡在了文件權限這一步。 具體表現是,網站能夠正常啓動,可是 npm addusernpm publish 都不會成功,緣由就是沒有相應的權限。 image.pnggithub

最終結合文檔中提到的權限問題和網上其餘同窗的解決方法搞定了web

chown -R 10001:65533 /path/for/verdaccio
複製代碼

image.png

  1. 啓動 docker-compose up --build -d

image.png

在項目中使用

.npmrc中配置,對應的scope走私有庫便可sql

@xxscrop:registry=http://your-npm-registry.com/
@xxteam::registry=http://your-npm-registry.com/
複製代碼

小結

我我的感受 verdaccio 適合小團隊或我的作私有庫的相關嘗試,由於不用怎麼折騰就能夠快速達到目的。 另外一點優點就是dan提到的本地一些場景的快速驗證。docker

缺點的話就是配置確實不多,若是對於npm私有庫的需求比較複雜,好比權限控制、包緩存等就不太適合了。 場景比較複雜的話,可能使用 cnpm 更加合適。cnpm 雖然部署上略微麻煩一些,可是在持久存儲有更多的選擇,好比可使用 mysqlsqlite。權限控制上能夠配置的東西也豐富一些。

參考

相關文章
相關標籤/搜索