深刻淺出FE(十三)前端nexus3 Yarn離線部署npm倉庫

Table of Contentshtml

1、前提node

2、nexus3 npm倉庫搭建linux

Nexus Repository Manager 中添加 npmnpm

Proxying npm Registriesjson

Private npm Registries緩存

Grouping npm Registries服務器

設置權限網絡

發佈到hostedmaven

3、下載項目須要的npm包工具

4、批量上傳npm包到倉庫

5、參考資料


網上的不少教程都是服務器能夠鏈接外網的前提下撰寫的,但看過無數教程尚未一個專門針對服務器離線環境如何部署一個npm倉庫。

1、前提

服務器離線、倉庫離線

2、nexus3 npm倉庫搭建

Nexus Repository Manager 中添加 npm

若是點擊:

 

這裏有三個類型的npm選項:

 

 

附上某歌翻譯:

Proxying npm Registries

爲了減小開發人員和CI服務器的重複下載量並提升下載速度,您應該對託管在https://registry.npmjs.org上的註冊表進行代理。 默認狀況下,npm直接訪問此註冊表。 您還能夠代理您須要的任何其餘註冊表。
要代理外部npm註冊表,您只需建立一個新的npm(代理),如「存儲庫管理」中所述。
最小配置步驟是:

Private npm Registries

私人npm註冊表可用於上傳您本身的軟件包以及第三方軟件包。 您能夠經過在存儲庫管理器中設置npm格式的託管存儲庫來建立私有的npm註冊表。 爲了這些目的,創建兩個獨立的託管存儲庫是一個很好的作法。
要建立具備npm格式的託管存儲庫,只需建立一個新的npm(託管),如「存儲庫管理」中所述。
最小配置步驟是:

  • 定義名稱
  • 選擇存儲的Blob存儲

隨着軟件包從存儲庫部署或刪除,npm註冊表信息將當即更新。

Grouping npm Registries

存儲庫組是將全部npm註冊表存儲庫從存儲庫管理器公開給您的用戶的推薦方式,而不須要任何其餘客戶端配置。存儲庫組容許您將多個代理和託管存儲庫的聚合內容公開爲一個URL到npm和其餘工具。這能夠經過建立一個新的npm(組),如「存儲庫管理」中所述,用於npm存儲庫。
最小配置步驟是:

  • 定義名稱
  • 選擇存儲的Blob存儲
  • 以所需的順序將npm存儲庫添加到成員列表中

典型的有用的示例是將代理存儲庫分組:代理npm註冊表,npm託管存儲庫與內部軟件包和另外一個npm託管存儲庫與第三方軟件包。
使用存儲庫組的URL做爲客戶端工具中的npm存儲庫URL,您可使用一個URL訪問全部三個存儲庫中的軟件包。添加的任何新軟件包以及添加到組中的任何新存儲庫將自動可用。


  1. 建立 Proxying npm Registries 代理倉庫

 

  1. 建立 Hosted npm Registries 代理倉庫

 

  1. 建立 Grouping npm Registries 倉庫
    須要注意的是組倉庫要把以前的 proxy 和 hosted 都添加上。

 

個人目錄對應爲 mytest/myhost/mygroup

在home目錄下, 的.npmrc文件中添加 registry = http://localhost:8081/repository/npm-all/ 。這個路徑要和本身的路徑一致,而且最後的rep名要和group相同。

 

此時能夠驗證一下 是否依賴走了代理:

image

設置權限

把這個選項拖到右邊就能夠了

 

在admin以外能夠從新設置一個帳號,以及權限

 

// 使用
$ npm login --registry https://nexus.onebean.net:8089/repository/onebean-npm-group/
// 進行登錄,須要填寫帳號、密碼以及郵箱。

 

發佈到hosted

我和原教程不同的是:我發佈到本地hosted, 而不是直接到npm社區,這裏須要注意的是 經過proxy是能夠直接發佈到npm社區的,使用的是社區的帳號密碼,這個須要提早申請

要發佈的模塊,必須保證在根目錄下有package.json文件,不然會報錯。

pachage.json文件內容比較隨意,若是比較懶 能夠用 npm init 直接自動生成。

 

{
      "name": "myhost",
      "version": "1.0.0"
    }

而後執行發佈命令:

 

$ npm publish --registry https://nexus.onebean.net:8089/repository/onebean-npm-hosted/

而後我遇到了報錯,按照報錯執行

$ npm adduser --registry https://nexus.onebean.net:8089/repository/onebean-npm-hosted/

這裏值得注意的是, adduser的時候要指明是哪一個rep,要不就會add到默認的.npmrc 裏添加的 rep中

 

添加完用戶以後,再執行發佈命令就ok了。

 

package.json能夠指定name 和version而且能夠添加發布路徑的配置:

 

{
     "name": "intro",
     "version": "1.0.0",
     "publishConfig" : {
         "registry" : "https://nexus.onebean.net:8089/repository/onebean-npm-hosted/"
      }
  }

這樣的話發佈直接用 npm publish就能夠了。

發佈以後能夠在 系統中的 左側browse 中的assets中看到上傳的資源

 

group 中能夠同時看到 proxy 和 hosted 的資源, proxy會存下第一次下載過的目錄,以後再下載時走的是代理,hosted存的是本地上傳的包資源。

而後能夠在本地下載一下剛纔上傳到hosted的包:

 

3、下載項目須要的npm包

開始我覺得項目的所需的npm包只有項目中node_module中的那些包,但實際上npm在npm

一、在項目目錄下,建立一個文件夾用於存放離線npm包

yarn config set yarn-offline-mirror ./npm-packages-offline-cache

二、設置離線緩存模式,並在項目目錄下生成一個.yarnrc 文件

yarn config set yarn-offline-mirror-pruning true

三、將.yarnrc文件移到項目目錄下

mv ~/.yarnrc ./

四、刪除yarn.lock文件

rm -rf node_modules/ yarn.lock

五、安裝npm包

yarn install

至此,咱們就會在根目錄下找到當前項目的全部離線安裝包

4、批量上傳npm包到倉庫

一、將上一步的全部npm包拷貝到沒有網絡環境的服務器中

二、首先要下載安裝node.js(下載地址:https://nodejs.org/en/)
三、配置npm倉庫地址
npm config -g set registry 遠程倉庫地址

三、登陸hosted倉庫
npm adduser -registry=hosted類型npm倉庫的地址,這裏須要登陸倉庫,會填寫用戶名、密碼、email,可再nexus查看

四、對於nexus設置security–>Realms
添加「npm Bearer Token Realm」
在這裏插入圖片描述
五、對於上傳的npm要求


yarn默認下載的npm壓縮包就是上傳須要的格式,壓縮包下有一層package目錄,package下才會有包文件(必定要包含package.json文件)
如果linux一次性壓縮的tgz,npm打包的文件也是放到package目錄下進行壓縮
注意:打包文件放到package下,壓縮包打開看到的目錄爲package,package進入
目錄下npm打包的文件。
在這裏插入圖片描述
六、右鍵bat文件編輯,將url:改爲hosted類型的npm的倉庫




@echo off
:: init params
set deployFile=*.tar.gz
set deployFile2=*.tgz
set url=http://xxx.xxx.xx.xx:8081/repository/npm-hosted/
echo Searching tar.gz and tgz file...
rem 啓用"延緩環境變量擴充"
SETLOCAL ENABLEDELAYEDEXPANSION
for %%f in (%deployFile% %deployFile2%) do (
   set name=%%f
   echo !name! to deploy to %url%
   rem deploy to server
   call npm publish -registry=%url% !name!
)

pause

七、將uploadNpmPac.bat放到須要上批量上傳的文件下,雙擊便可運行

至此,全部咱們須要的離線包便可上傳到咱們的npm倉庫。

5、參考資料

一、npm 模塊安裝機制簡介

二、nexus 上安裝npm私服倉庫

三、nexus私服批量上傳maven庫,nuget庫,npm庫(上傳jar包能夠自動檢測版本號)

相關文章
相關標籤/搜索