1. 程式人生 > 其它 >使用 Sinopia 搭建npm私有倉庫

使用 Sinopia 搭建npm私有倉庫

前言

隨著前端技術的不斷改革與發展,前端專案越來越大、業務也逐漸複雜,而 前端工程化 已是開發中必不可少的步驟。

在開發中,我們常常會將常用工具、元件等進行封裝,又或是將專案進行合理的模組劃分並封裝成 npm 包上傳到私有倉庫進行維護
此時,我們可以使用 Sinopia 搭建 npm 私有倉庫對模組進行統一管理維護

安裝步驟

確保服務端已安裝node環境
安裝 sinopia

npm install -g sinopia

啟動 sinopia

sinopia

此時看到以下輸出說明啟動成功

warn  --- config file - /home/sinopia/config.yaml
warn  --- http address - http://localhost:4873/

預設配置

在前面啟動時 sinopia 自動建立了一個配置檔案:/home/sinopia/config.yaml
我們只需要開啟編輯它即可修改配置,這裡將預設配置英文註釋替換成了中文

vim /home/sinopia/config.yaml
#
# 這是預設的配置檔案。它允許所有使用者做任何事情,
# 所以不要在生產系統上使用它。
#
# 在這裡檢視更多配置檔案示例:
# https://github.com/rlidwka/sinopia/tree/master/conf
#

# npm包的存放路徑
storage: ./storage

auth:
  htpasswd:
    file: ./htpasswd # 儲存使用者的賬號密碼等資訊
    # 允許註冊的最大使用者數,預設為“+inf”。
    # 您可以將其設定為-1以禁用註冊。
    # max_users: 1000

# 拉取公共包的地址源,預設為npm的官網,也可改成淘寶的映象地址
uplinks:
  npmjs:
    url: https://registry.npmjs.org/

packages: # 這裡都是在配置許可權
  '@*/*':
    # 作用域包
    access: $all
    publish: $authenticated

  '*':
    # 我們可以與之交談的其他已知儲存庫的列表#允許所有使用者(包括未經身份驗證的使用者)閱讀和
    # 釋出所有包
    #
    # 您可以指定使用者名稱/組名(取決於您的auth外掛)
    # 還有三個關鍵詞:"$all", "$anonymous", "$authenticated"
    access: $all

    # 允許所有已知使用者釋出包
    # (任何人都可以預設註冊,記得嗎?)
    publish: $authenticated

    # 如果包在本地不可用,則代理請求“npmjs”登錄檔
    proxy: npmjs

# 日誌設定
logs:
  - {type: stdout, format: pretty, level: http}
  #- {type: file, path: sinopia.log, level: info}

如果不想用上面自動建立的 config file 地址,也可以使用 sinopia -c 配置檔案地址 指定配置檔案

配置外網對映,在配置中新增

listen: 0.0.0.0:4873

修改配置後重啟,外網訪問看到下圖說明成功

其他更多配置如果有相關需要,上述預設配置檔案中也有說明,可以去 https://github.com/rlidwka/sinopia/tree/master/conf 檢視

賬號管理

config.yaml 中 auth 配置預設可以通過客戶端 npm adduser 新增賬號
我們可以要新增賬號時將 max_users 的值改大,新增成功後改為 -1 禁止客戶端新增賬號,
當然也可以永遠將 max_users 設定成-1 ,然後修改 file: ./htpasswd 檔案來管理使用者
檔案中密碼是使用 SHA1 加密,假如有自己的後臺系統,可以自己出介面加密存入這個檔案,
如果懶或者對賬號管理不頻繁也可以隨便在網上搜索

線上生成htpasswd工具
例如下面的 z3 賬號:
file: ./htpasswd 檔案示例:

客戶端操作

私有倉庫搭建好後,登入發包等和 npm 無區別,只需要切換源地址即可:npm set registry 你的地址
嫌 npm 源地址切換麻煩也可以使用三方工具管理,例如 nrm ,如果只是拉取包,相當於公司部分前端不需要發包,但需要拉取,也可以在專案中建立 .npmrc 檔案配置即可。