背景
? ? 基于項(xiàng)目統(tǒng)一管理規(guī)范辩越,需要對(duì)包管理器進(jìn)行統(tǒng)一嘁扼,目前市面上比較流行的是only-allow庫,但是經(jīng)過測(cè)試区匣,發(fā)現(xiàn)對(duì)multirepo的支持度不友好偷拔,見下文
only-allow的不足
? ??安裝缺陷
? ??????一次性安裝
? ??????????添加preinstall鉤子并設(shè)置指定的包管理器
? ??????????pnpm i
? ? ? ? ????????使用pnpm i安裝,發(fā)現(xiàn)only-allow包能正確給出提示亏钩,但是node_modules被正常安裝
? ??????????刪除node_modules后莲绰,執(zhí)行cnpm i,表現(xiàn)和pnpm一致
????????單獨(dú)安裝
? ? ? ? ? ? 執(zhí)行pnpm|cnpm i lodash ,發(fā)現(xiàn)連攔截提示都沒有?
? ??其他
? ? ? ? 在使用了錯(cuò)誤的包管理器安裝后姑丑,當(dāng)出現(xiàn)錯(cuò)誤后蛤签,項(xiàng)目會(huì)生成npminstall-debug.log文件,當(dāng)再次切換到“合法的”包管理器安裝后栅哀,該文件仍然存在
? ? ? ? 如果先后使用了pnpm震肮,npm,則生產(chǎn)的lock文件會(huì)被保留
結(jié)論
????由于以上三個(gè)不足留拾,我決定棄用only-allow戳晌,通過查找翻閱,發(fā)現(xiàn)類似功能的庫痴柔,但是由于其知名度不如only-allow沦偎,因此需要對(duì)其進(jìn)行校驗(yàn),以確保達(dá)到如下要求
? ??支持?jǐn)r截“非法”包管理器咳蔚,并不安裝node_modules
? ??當(dāng)從“非法”轉(zhuǎn)為設(shè)置的包管理器后豪嚎,需要?jiǎng)h除無用的文件,比如:上次安裝時(shí)的錯(cuò)誤文件谈火,或遺留的lock文件
使用與驗(yàn)證
? ? 安裝npm-only-allow文檔添加如下代碼
? ??統(tǒng)一安裝
? ??????pnpm i
? ? ? ? ? ? 它可以正確給出提示(而且是中文的侈询,更加友好),且不會(huì)生產(chǎn)node_modules
? ? ? ? ? ? 可以看到糯耍,安裝錯(cuò)誤后生成了.pnpm-debug.log文件扔字,現(xiàn)在使用yarn安裝囊嘉,測(cè)試是否能正常安裝,以及是否還存在該錯(cuò)誤文件革为,發(fā)現(xiàn)符合預(yù)期
? ??單個(gè)安裝
? ? ? ? 執(zhí)行pnpm i lodash哗伯,我發(fā)現(xiàn)是沒有被攔截掉的,翻了下文檔后發(fā)現(xiàn)篷角,是需要在項(xiàng)目執(zhí)行時(shí)才會(huì)針對(duì)單獨(dú)安裝進(jìn)行檢測(cè)的,則執(zhí)行npm run start系任,發(fā)現(xiàn)會(huì)被正確攔截恳蹲,并且列出了哪個(gè)依賴被錯(cuò)誤安裝了
? ? ? ? 此時(shí),再使用正確的包管理器yarn安裝(yarn add lodash)后俩滥,再重啟測(cè)試嘉蕾,發(fā)現(xiàn)程序運(yùn)行正常
結(jié)論
? ? 通過在我自己的搭建的簡(jiǎn)易項(xiàng)目中測(cè)試(實(shí)際上測(cè)試了很多情況),該包基本上能滿足預(yù)期效果霜旧,但是有一點(diǎn)目前尚不支持错忱,那就是,如果我的項(xiàng)目目前已經(jīng)啟動(dòng)過了挂据,那它就只能等待下一次運(yùn)行時(shí)才能給出檢測(cè)結(jié)果以清,這一點(diǎn)可能是作者本身沒有考慮到吧,不過應(yīng)該也不難實(shí)現(xiàn)崎逃,待我去提個(gè)issue(2023-4-3更新:issue已解決)