最近在項(xiàng)目上遇到了一個(gè)需求,需要將相關(guān)的npm依賴包上傳至Nexus(因?yàn)楹罄m(xù)的開發(fā)是在內(nèi)網(wǎng)環(huán)境中開發(fā)蒋困,沒有外網(wǎng)政恍,無法使用公網(wǎng)的鏡像)氓涣。
解決這個(gè)問題,有兩種思路
方式1:暫時(shí)開通外網(wǎng)權(quán)限陋气,通過設(shè)置類型為代理(proxy)的私庫來緩存相關(guān)的依賴包劳吠。
首先就是新建一個(gè)私庫:
選擇npm(proxy)
然后輸入名稱和要代理的遠(yuǎn)程倉庫地址
完成之后本地就可以將拉取依賴的地址設(shè)置成這個(gè)新建的私庫的地址,拉取完成后相關(guān)的依賴便會緩存在這個(gè)私庫中恩伺。
優(yōu)點(diǎn):操作方便赴背、自動(dòng)緩存
缺點(diǎn):每次變更了依賴內(nèi)容都需要去申請一次外網(wǎng)權(quán)限
方式2:向Nexus上傳本地的npm依賴
首先也是需要?jiǎng)?chuàng)建私庫椰拒,和方式1不同晶渠,創(chuàng)建的是類型為hosted的私庫:
之后便是需要下載本地對應(yīng)依賴的tgz包并且上傳到這個(gè)私庫中。
- 安裝node-tgz-downloader燃观,用來下載依賴的tgz文件
npm install node-tgz-downloader -g
2.安裝依賴
npm install
3.安裝完依賴后會生成package-lock.json文件褒脯,然后可以執(zhí)行下面的命令下載對應(yīng)的依賴包tgz(注意:下載時(shí)一些包經(jīng)常會下載失敗,需要保證網(wǎng)絡(luò)條件穩(wěn)定缆毁,若失敗可多嘗試幾次)下載的tgz文件會在項(xiàng)目根目錄/tarballs下
download-tgz package-lock package-lock.json
ps:如果是使用yarn來安裝依賴番川,可以將yarn.lock先轉(zhuǎn)換成package-lock.json:
npm install -g synp
// 在根目錄下
synp --source-file yarn.lock
4.去重
在根目錄下新建一個(gè)tgz文件夾,然后在tarballs文件夾下執(zhí)行下面的shell命令:
find . -name '*.tgz' -exec cp -f {} ../tgz \;
5.創(chuàng)建并執(zhí)行發(fā)布腳本
新建.publish.sh脊框,內(nèi)容為:
#!/bin/bash
PACKAGE_PATH=./tgz
REPOSITORY=your site
npm login --registry=$REPOSITORY
for file in $PACKAGE_PATH/*.tgz; do
npm publish --registry=$REPOSITORY $file
done
然后執(zhí)行該腳本颁督,上傳速度比較慢,個(gè)人測試2000多個(gè)tgz文件浇雹,用時(shí)1小時(shí)多沉御。
如果上傳后部分包缺失,可以重新上傳或者采用nexus的手動(dòng)上傳