化繁為簡(jiǎn),如何快速實(shí)現(xiàn)企業(yè)級(jí)私有 npm 包依賴管理服務(wù)?

小明最近加入了互聯(lián)網(wǎng)公司 A,負(fù)責(zé)前端基礎(chǔ)設(shè)施建設(shè),在 npm 依賴管理建設(shè)上碰到了不少問題。
安裝速度
同事小丁經(jīng)常和小明吐槽前端構(gòu)建問題,這依賴安裝動(dòng)不動(dòng)就五分鐘十分鐘,經(jīng)常還會(huì)安裝失敗,太影響我代碼部署時(shí)間了,趕緊給我解決一下。小明一看,是公司的網(wǎng)絡(luò)在訪問 npm registry 的時(shí)候有很多網(wǎng)絡(luò)超時(shí)的問題,這個(gè)好解決,前端都知道國內(nèi)有個(gè) npm 鏡像,我們拿過來部署一下就行。
結(jié)果小明部署了之后嚇一跳,同步跑了一禮拜還沒結(jié)束,磁盤都用了十幾 T 了,這可怎么辦?
依賴管控及止血
某天公司內(nèi)部大量前端項(xiàng)目啟動(dòng)時(shí),控制臺(tái)輸出了大量亂碼,程序也無法正常啟動(dòng)了,所有的研發(fā)工作陷入了停滯。小明緊急發(fā)起故障排查群,經(jīng)過排查原來是某 npm 包發(fā)布出現(xiàn)了 bug,程序在啟動(dòng)時(shí)候陷入了死循環(huán),導(dǎo)致代碼無法正常運(yùn)行。公司需要小明立即解決這個(gè)問題,恢復(fù)研發(fā)工作。
這個(gè)包是社區(qū)發(fā)布的,小明沒有直接的控制權(quán),小明無法直接將這個(gè) npm 包回滾。小明在研究了 npm 的安裝機(jī)制之后給出了一個(gè)解決方案,在所有的項(xiàng)目中加入 npm 的 overrides 配置,指定 npm 包為無 bug 版本,重新安裝依賴后即可恢復(fù)。
請(qǐng)問小明的這個(gè)操作帶來了以下哪些問題?
A. 成本極高,所有項(xiàng)目需要手動(dòng)操作。B. 解決方案被動(dòng),需要有溝通過程才能修復(fù)。C. npm 包版本被鎖死,bug 修復(fù)后無法及時(shí)更新。
企業(yè)私有化定制
除了 npm bug 事件外,這一年來國內(nèi)外互聯(lián)網(wǎng)形勢(shì)變化較大,npm 供應(yīng)鏈攻擊時(shí)不時(shí)出現(xiàn),于是老板給小明提了一個(gè)需求:所有的 npm 包同步之前需要對(duì)其進(jìn)行安全和漏洞掃描,只有通過之后,這些 npm 包才能進(jìn)入公司內(nèi)部。小明收到這個(gè)需求之后欣然答應(yīng),這有什么難的,把代碼哪來改一改就行。
柳暗花明
在小明仔細(xì)閱讀了 cnpmjs.org 的代碼之后,頭都大了,這什么上古項(xiàng)目,使用的居然是 koa + js,看也看不懂,也沒提供什么擴(kuò)展的方式,難道要 fork 過來以后魔改嗎?

在小明痛苦的時(shí)候,又看到了一個(gè)新項(xiàng)目?cnpmcore,使用的 tegg + ts,項(xiàng)目結(jié)構(gòu)清晰、代碼易懂,國內(nèi)的 npmmirror 鏡像就是用了它,而且居然還支持企業(yè)的二次定制開發(fā),這是什么神仙項(xiàng)目,小明果斷選擇了他。
搶先體驗(yàn) :?https://github.com/cnpm/cnpmcore
如果你也對(duì)這個(gè)項(xiàng)目感興趣,歡迎預(yù)約 8 月 8 日 NodeParty 線上直播,螞蟻集團(tuán)前端工程師零弌將分享《基于 cnpmcore 實(shí)現(xiàn)企業(yè)級(jí)包管理服務(wù)》,更多詳細(xì)功能介紹,NodeParty 上為你揭曉!
?? ?歡迎預(yù)約直播,第一時(shí)間收到開播提醒~
預(yù)約視頻號(hào)直播:微信視頻號(hào) ?? 支付寶體驗(yàn)科技
關(guān)注 B 站直播間:https://live.bilibili.com/21726701