為什麼 Composer 無法遞迴載入儲存庫?#

使用自訂儲存庫時,您可能會遇到問題,這是因為 Composer 未載入需求的儲存庫,因此您必須在所有 composer.json 檔案重新定義這些儲存庫。

在詳細說明原因之前,您必須瞭解自訂 VCS 和套件儲存庫的主要用途是暫時嘗試一些事情或在您的拉取請求合併之前使用專案的分支等。您不應使用它們來追蹤私人套件。對於那部分,您應查看 Private Packagist,它讓您可以在一處設定所有私人套件,並避免與內嵌 VCS 儲存庫相關聯的慢速。

相依性解析器可透過三種方式處理自訂儲存庫

  • 擷取根套件的儲存庫,取得定義儲存庫中的所有套件,再解析需求。這是目前的狀態,而且運行良好,除了有無法遞迴載入儲存庫的限制。

  • 擷取根套件的儲存庫,初始化定義儲存庫中的套件時,遞迴初始化這些套件中找到的所有儲存庫及其套件的套件,再解析需求。這樣或許可行,但會大量減慢初始化速度,這是因為每個 VCS 儲存庫需要幾秒鐘,而且可能會陷入完全損毀的狀態,這是因為套件的許多版本可以在套件儲存庫中定義相同的套件,但 dist/source 不同。這可能會產生許多問題。

  • 擷取根套件的儲存庫,再擷取第一個層級相依性的儲存庫,再擷取相依性的儲存庫,再解析需求。這聽起來可能更有效率,但會遇到與第二個解決方案相同的問題,這是因為載入相依性的儲存庫並不像聽起來這麼簡單。您需要載入需求的所有潛在 match 的所有儲存庫,這可能會再次產生相衝突的套件定義。

找到錯字了嗎?本文件內容有誤?Fork 並進行編輯