Table of Contentshtml
1、前提node
2、nexus3 npm倉庫搭建linux
Nexus Repository Manager 中添加 npmnpm
設置權限網絡
發佈到hostedmaven
網上的不少教程都是服務器能夠鏈接外網的前提下撰寫的,但看過無數教程尚未一個專門針對服務器離線環境如何部署一個npm倉庫。
1、前提
服務器離線、倉庫離線
2、nexus3 npm倉庫搭建
Nexus Repository Manager 中添加 npm
若是點擊:
這裏有三個類型的npm選項:
附上某歌翻譯:
Proxying npm Registries
爲了減小開發人員和CI服務器的重複下載量並提升下載速度,您應該對託管在https://registry.npmjs.org上的註冊表進行代理。 默認狀況下,npm直接訪問此註冊表。 您還能夠代理您須要的任何其餘註冊表。
要代理外部npm註冊表,您只需建立一個新的npm(代理),如「存儲庫管理」中所述。
最小配置步驟是:
- 定義名稱
- 定義遠程存儲的URL,例如https://registry.npmjs.org
- 選擇存儲的Blob存儲
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訪問全部三個存儲庫中的軟件包。添加的任何新軟件包以及添加到組中的任何新存儲庫將自動可用。
- 建立 Proxying npm Registries 代理倉庫
- 建立 Hosted npm Registries 代理倉庫
- 建立 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倉庫。