前端架構之路(7) 私有 npm 倉庫

2021-09-13 15:45:45 字數 2991 閱讀 6758

元件化之後,搭建 「私有 npm 倉庫」 是個不錯選擇。

私有 npm 倉庫可以讓我們使用元件就像 npm 官方倉庫裡的包一樣方便。

目前比較好的解決方案有兩種:

sinopia(verdaccio)

cnpm + cnpmjs.org

sinopia 在15年的時候就停止更新了,繼而由 verdaccio 提供更新公升級,所以兩者用法基本上都是一致的,以下都以 sinopia 為例說明。

$ npm install -g sinopia
配置檔案位於~/.config/sinopia/config.yaml

# path to a directory with all packages

storage: /home//.local/share/sinopia/storage # 庫存路徑,需要考慮磁碟空間

web: # 自定義web項,即瀏覽器訪問頁面

title: sinopia

auth:

htpasswd:

file: ./htpasswd # 新增使用者(npm adduser)後自動建立,儲存使用者資訊,可以初始化使用者

uplinks: # 可以配置多個上游位址,後面packages中的proxy指定用哪個

npmjs:

url: # 更改此上游位址

packages: # 包的許可權管理,$all為所有人,$authenticated為通過驗證人

# 分布和安裝兩種許可權,值可以特指某幾人

'@*/*': # 跟package.json中的name屬性進行匹配

# scoped packages

access: $all

publish: $authenticated

'*':

access: $all

publish: $authenticated

proxy: npmjs

logs:

- listen: 0.0.0.0:4873 # 設定監聽位址,0.0.0.0匹配本機位址

$ npm config set registry http://:4873/
推薦使用 nrm 來快速切換 npm registry 配置。

sinopia
或者使用 pm2 永久執行

pm2 start sinopia
現在你就可以發布私有包了。

sinopia的優點是配置簡單,對環境依賴少(僅 node 就夠了),並且支援windows系統下執行。

但它也有缺點,主要是以下幾點:

快取優化不足,經常會在安裝共有包的時候處於掛起狀態;

不能做官方倉庫的映象。

所以,sinopia比較適合個人搭建在本地作為 npm 快取,這樣,安裝過的包會直接從快取中獲取,加快安裝速度。

對於企業級的應用來說,就需要另外乙個解決方案了:cnpm + cnpmjs.org

環境依賴:

$ npm install -g cnpm

$ npm install -g cnpmjs.org

配置檔案位於~/.cnpmjs.org/config.json

],"mysqldatabase": "cnpmjs", // 資料庫名

"enableprivate": true, // 是否啟用私有化,這樣只有定義在 `admins` 中的使用者才能發布

"admins": ,

"syncmodel": "exist", // 同步模式

"scopes": [ // 包字首,如果不是以這個字首命名的包將不能發布,可以配置多個

"@test"

],"registryhost": "", // 你的伺服器對應的 npm registry 位址

"officialnpmregistry": "" // 如果在該倉庫中找不到的包,會上游到**去找

}

更多配置參考 cnpmjs.org config

$ cnpm config set registry
cnpmjs.org start
執行的時候將會開啟兩個埠:7001(registry),7002(web)。

7001(registry)

server 

location ~ /.well-known

client_max_body_size 50m;

}

重啟 nginx,現在你就可以通過去發布私有包到這個倉庫裡了(如果沒有其他問題的話)。

7002(web)

server 

location ~ /.well-known

client_max_body_size 50m;

}

重啟 nginx,現在你就可以通過訪問倉庫web頁面了(如果沒有其他問題的話)。

永久執行

如果僅通過cnpmjs.org start執行,一旦關閉終端,程式就會停止執行。推薦使用screen命令開啟永久執行,可以通過 linux screen 了解下這個命令的用法。

# 建立乙個名為 cnpmjs 的視窗

$ screen -s cnpmjs

# 執行程式

$ cnpmjs.org start

# 按ctrl+a,然後再按d,離開當前視窗,而程式不會終止

ctrl+a+d

# 重新進入 cnpmjs 的視窗,做更多的操作

$ screen -r cnpmjs

npm私有倉庫搭建

為了使公司內部前端公共 更方便的共享,決定使用npm私有倉庫,以前用的公司內部搭建的gitlab,對於前端來說不夠高大上。私有倉庫可先的方案有多種 此文選擇的第5種 購買npm官方私有倉庫服務 首先要花錢,而且花了錢也沒有好的體驗,因為伺服器是在國外的,速度讓人捉急,並且 畢竟是要儲存在別人手裡。c...

搭建企業私有npm倉庫

必要性 如果公司處於隱私保護的目的,不想將封裝的包推到npm社群,但是又急需一套完整的包管理工具來管理很多的封裝元件,以方便公司內部人員使用.建立一套私有的npm倉庫很有必要.注 建立私有倉庫還可以存著一些常用的npm包,相比npm和 映象的cnpm,私有倉庫安裝依賴的速度更快.安裝環境 cento...

NPM私有包部署到私有倉庫

賬號登入 npm login登入成功用 npm who am i進行驗證 初始化npm庫 npm init然後依次輸入相應的引數,其中version必填,最後生成的pagkage如下圖 在pagkage同級寫乙個測試檔案,向外暴露介面 至此,乙個npm包建立完成 發布共有npm包 npm publi...