1、背景
一方面,公司出於自身隱私保護需要,不想把自己的代碼開源到包管理區,但是又急需一套完整包管工具,來管理越來越多的組件、模塊和項目;另一方面,前端對於已有的開源包需要根據項目需要做部分修改和優化,根據公司戰技部要求,包的代碼量過大的情況下會導致jenkins編譯緩慢,並且該部分代碼不應計入個人開發代碼量。當前常用的前端包管理器是npm的公共倉庫,鑒於目前部門使用nexus2管理后端jar包,考慮使用nexus2搭建npm私有倉庫。
2、nexus2私有倉庫搭建(搭建過程略,可參考https://blog.csdn.net/xixiaoxie2/article/details/72492085)
倉庫的用戶名、密碼和郵箱為:deployment/xxx123/it@xxx.com
Nexus2搭建3種類型的倉庫和說明,如下:
- Proxying npm Registries代理倉庫
倉庫地址:http://10.xxx.7.xxx:8081/nexus/content/repositories/npm-proxy/
說明:
該倉庫可以遠程訪問公共倉庫,當前設置的register為https://registry.npm.taobao.org
服務器會緩存下載過的包
只能下載公共倉庫的包
- Private npm Registries 托管倉庫
倉庫地址:http://10.xxx.7.xxx:8081/nexus/content/repositories/npm-private/
說明:
該倉庫即為私有倉庫,可以發布自己的代碼包和下載私有倉庫已發布的代碼包
- Grouping npm Registries 存儲庫組
倉庫地址:http://10.xxx.7.xxx:8081/nexus/content/repositories/npm-it/
說明:
將前兩個單獨的倉庫合並起來
既可以下載公共倉庫的包,也可以下載私有倉庫的包
3、配置.npmrc文件(用戶信息)
查看npm配置
npm config ls
register未配置,默認為http://registry.npmjs.org
查看HOME路徑下有沒有.npmrc配置文件,若沒有,可手動創建,右鍵新建文本文檔,輸入文件名:.npmrc.
下面開始配置npm用戶信息,配置方式有兩種:
A.編輯.npmrc文件
使用文本編輯器如notepad++,打開.npmrc文件,添加npm配置項:
email=it@xxx.com always-auth=true _auth="ZGxxxxxxxxxxxxxxxxxxxMw=="
email指登錄用戶的郵箱
always-auth指是否進行身份驗證
_auth為用戶名:密碼的base64編碼,即deployment:xxx123的base64編碼,當用戶信息修改時,需要修改以上配置項
B.通過npm config set命令配置
npm config set email “it@xxx.com” npm config set always-auth true npm config set _auth "ZGxxxxxxxxxxxxxxxxxxxxMw=="
4、下載公共包和私有包
首先,修改npm的register注冊表,可臨時修改也可永久修改
- 臨時修改的方式
從存儲倉庫即npm-it中下載包,執行命令如下
npm -loglevel info install angular -registry=http://10.xxx.7.xxx:8081/nexus/content/repositories/npm-it/
-loglevel info選項可查看下載地址,正常下載可以不添加
-registry即臨時設置注冊表地址
- 永久修改的方式,即修改npm配置
可修改.npmrc文件,增加register配置:
registry=http://10.xxx.7.xxx:8081/nexus/content/repositories/npm-it/
或者執行
npm confige set register=”http://10.xxx.7.xxx:8081/nexus/content/repositories/npm-it/”
修改完成后,npm config ls查看下registry
執行
npm -loglevel info install jquery
備注:
從npm-it庫中可下載公共倉庫的包和私有倉庫的包
從npm-proxy庫中可下載公共倉庫的包
從npm-private庫中可下載私有倉庫的包
5、發布私有包
發布私有包時,npm的registry需修改為
http://10.xxx.7.xxx:8081/nexus/content/repositories/npm-private/
可按照兩種方式:
永久修改:修改npm的registry配置
臨時修改:在npm publish添加registry選項或者在需要發布包的package.json文件中配置,具體操作見下文。
要發布的模塊,必須保證在根目錄下有package.json文件,沒有話,會出現下面圖上的錯誤。
package.json中可以只是簡單的name和version的配置,如下:
{ "name": "test-npm-publish", "version": "1.0.2", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
package.json文件配置ok,就可以publish了
- 永久修改registry方式執行npm publish(具體操作同4中的永久修改方式,過程略)
- 臨時修改的方式
第一種 npm publish命令添加-registry選項
第二種 package.json文件中添加發布路徑配置,直接執行npm publish
"publishConfig" : { "registry" : "http://10.xxx.7.xxx:8081/nexus/content/repositories/npm-private/" },
6、撤銷已發布的私有包
一方面,nexus2版本不支持unpublish包,另一方面,npm官網並不建議unpublish包。所以除非特殊情況,不建議對已上傳的包進行撤銷,可以版本迭代。包要刪除,可直接在nexus上手動刪除。
備注:其實npm私有倉庫的下載發布撤銷包的操作和npm官方公共倉庫的下載發布撤銷包操作類似,主要區別即npm配置的register切換和用戶信息