🎋 竹子日誌

依賴循環:前端的 circular dependency 多半不會爆

可能寫前端寫了一陣子開始就慢慢會感受到,模組和模組都是互相 import 來 import 去,可能用的很開心時,在自己一個不注意就發生「circulardependency」

可能這議題在前端不會是很嚴重的問題。資料依賴循環確實會是個問題,它會造成程式本身的崩潰,因為這樣存在強烈的「不合理性」。但模組循環卻是經常發生,而且本身可能是存在合理性的。或許有些人無法理喻為什麼發生模組循環卻不會有任何問題?其實緣由是 JavaScript 在 ESModule 運行下,會先塊狀每個模組,但卻不會直接運行。透過打包和運行引擎會講模組綑綁在一塊,此時都已經加載完成,只要不發生「資料循環」,自然就不會觸發循環現象。

那前端是否就可以忽略這件事?關於這件事就 見仁見智,既然不會發生問題,許多人選擇視而不見,以「方便就好」的心態在維護專案。但也不是完全不會有問題,當你以 CommonJS 的方式把程式運行起來時就有可能會出問題,因為 CommonJS 的運行與 ESModule 終究是有所不同的。

我個人對於這問題在意的並不是「會不會動」這個問題,而是認為對於程式的架構與邏輯的依賴關係不清楚才有這樣的現象。任何 Domain 都應該有優先次序與層次高低,邏輯切分應該是更明確並有樹狀關係,而不存在環狀關係。

你在寫程式的時候回去在意是否發生模組依賴循環嗎?

留言