為什么 Composer 不遞歸加載儲存庫?

2018-08-12 22:00 更新

為什么 Composer 不遞歸加載儲存庫?

當(dāng)你使用自定義庫時,你可能會碰到問題,因?yàn)?Composer 不會遞歸加載你要求的儲存庫,所以你必須修改這些儲存庫中所有的 composer.json 文件。

在詳細(xì)說明為什么是這樣之前,你需要明白:使用自定義 VCS & 包儲存庫去嘗試某些事情,或者使用你 fork 的一個分支,直到你的 pull request 被合并,等等。你不應(yīng)該使用它們來跟蹤你的私人資源包,關(guān)于這點(diǎn)你應(yīng)該看看 setting up Satis 來為你的公司甚至自己處理私人資源包。

這里有三個途徑可以使依賴解析器使用你自定義的儲存庫:

  • 讀取根包的存儲庫,從定義的存儲庫得到所有的軟件包,解析依賴需求。這是目前的狀態(tài),它工作得很好,除了有“無法遞歸的加載儲存庫”這個限制。

  • 讀取根包的存儲庫,同時從定義的 repos 初始化資源包,遞歸的初始化,根據(jù)所有依賴包中定義的 repos,以及這些依賴包所依賴的其它包中定義的 repos,等等,然后再解析依賴需求。這可能可以工作,但會嚴(yán)重影響初始化的速度,因?yàn)槊孔x取一個 VCS repos 都需要幾秒鐘。它可能最終執(zhí)行失敗,因?yàn)橐粋€包的不同版本,可能來自一個包資源庫中一個相同的包,但來至不同的 dist/source 。這樣有太多的可能會出錯。

  • 讀取根包的存儲庫,然后讀取第一級依賴,接著讀取這些依賴包所依賴的其它包,等等,然后再解析依賴需求。這樣聽起來更有效率,但仍然存在第二種解決方案中的問題。因?yàn)榧虞d依賴的儲存庫并不像聽起來那么容易。你需要加載所有可能匹配的依賴包的 repos,而這些包的定義又可能是互相沖突的。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號