hexo 又成了技術流的玩具
其實寫這篇文章,心情不太痛快。hexo 是我找了好久才確定下來,能用 markdown 寫 blog 的系統。之前試過的如 jekyll 太複雜,而且定製化程度太低,不靈活。剛開始用 hexo 的時候發現它簡直是尤物,輕便簡潔,擴充套件性還不錯,官方收錄了很多 plugins ,足夠碼農用了。
結果沒過幾年,hexo 也快成了技術流的玩具。
問題一。npm 依賴存在缺陷
首先是"[email protected]"
某個依賴"[email protected]"
,後者依賴"[email protected]"
,而 chokidar 又依賴"[email protected]"
。好了,最後這個"[email protected]"
是被deprecated
的版本,包含原生庫,已經不存在 binary 下載,從原始碼編譯也會報錯。錯誤的大意是跟 node 的版本不相容。
下面我把這個關係鏈重新理一下。
graph LR; A["[email protected]"]-->B["[email protected]"]; B-->C["[email protected]"]; C-->D["[email protected]"]; D-->E["(HELL)"];
除了上面的問題以外,大量已經停更的 plugins 依賴的"[email protected]"
等舊庫,也多對"[email protected]"
存在間接依賴。
用一句話來說後果,
在 MacOS 下,用hexo-cli new
+npm i
的方式,根本安裝不上 hexo。
問題二。外掛的停更、老化
像上面提到的,停更的外掛,其間接依賴的第三方庫若是被廢棄,外掛本身也就不可用了。這是一種情況。
第二種情況,hexo 本身在發展,某些停更的第三方外掛沒有跟著做適配,結果是 hexo 的使用體驗受到了影響。
第三種情況,最常見的。哪怕是官網列表中的外掛,質量也是有高有低,對那些技術不靈光的使用者實在麻煩。
解決方法
針對安裝不上的問題。我也不知道怎麼解決 :( 我用撞大運的辦法,hexo-cli new
一個專案以後,手動修改package.json
,將"[email protected]"
這個依賴指向自己 fork 的hexo
repo,這個 forked repo 裡面已經修改了hexo-fs
是指向一個 forkedhexo-cli
repo。最後在這個 forked hero-cli repo 裡面,把對chokidar
的引用上升到"[email protected]"
以後。
挺複雜的,對吧。不懂點開發,還真辦不了。
針對外掛停更、老化的問題,只有一個辦法,就是自己 fork 做二次開發。專案的依賴中直接寫上自己的 git repo。
別問我有沒有現成的。我也很無奈。
PS:這就是 npm 生態帶來的問題。left_pad 事件發生後,有人說 nodejs 程式設計師懶到『 連最簡單的程式碼都不想寫』,只想引用。我不太贊同這個評論的態度,不過 npm 社群的程式設計師的確是把程式碼複用做到比較極致的地步。
UPDATE(2019-02-28)
發現在新 new 的專案裡面,"[email protected]"
的釋出版好像是依賴的"[email protected]"
,已經升級到間接依賴"[email protected]"
。
挺無語的。真的。還有點懵圈,沒太搞懂。
昨天我可是rm -rf ./node_modules/* && npm i
操作的,按說快取應該沒影響才對。如果是 npm 自己的 cache(我設定到了 ~/.npm/cache 目錄),新 new 出來的專案應該也會受影響才對啊。
好吧,不折騰了。下次再遇到,所有快取,全部清理得了。