2016-02-29 64 views
2

在我目前工作的公司,我們最近開始將我們的代碼移動到不同的私有存儲庫,以便它更易於維護和重用(並且使它更易於開源後來)。嵌套的依賴關係和作曲家的私人存儲庫

每個PHP存儲庫也是一個Composer包,可以在我們需要的時候在我們的項目中使用。

目前這種方法存在問題:每次我們需要一個依賴於其他包的包時,我們需要在根目錄composer.json中指定這些包。

例如,讓我們說,在根composer.json我們需要需要兩個包company\bcompany\c,而且company\c需要另一個包company\d包。然後,將得到根本composer.json看起來就像這樣:

{ 
    "require": { 
     "company/b": "dev-master", 
     "company/c": "dev-master", 
     "company/d": "dev-master" 
    }, 
    "autoload": { 
     "psr-4": { 
      "Company\\" : "src\Company" 
     } 
    }, 
    "repositories": [ 
     { 
      "type": "vcs", 
      "url": "[email protected]:company/b.git" 
     }, 
     { 
      "type": "vcs", 
      "url": "[email protected]:company/c.git" 
     }, 
     { 
      "type": "vcs", 
      "url": "[email protected]:company/d.git" 
     } 
    ] 
} 

有沒有一種方法,以避免在根composer.json指定嵌套依賴和使用,在每個包的composer.json指定的人?

編輯: 我以前說過的一切只對私人包有效。如果一個軟件包(比如company\b)需要一個可以在Packagist上找到的公共軟件包,那麼可以在company\bcomposer.json中指定它的依賴關係,並且它將被導入。

回答

3

正如您發現的那樣,只有根包可以將存儲庫元數據添加到已知軟件包的集合中。

我建議你看看Satis來創建本地Composer存儲庫。這隻需要您將此單個存儲庫添加到所有軟件包的所有composer.json文件中,並且它將用作有關您所有私有存儲庫的可更新知識來源。你不再需要在任何地方添加Git倉庫列表。

我成功爲我們的IT企業託管了大約120個內部軟件包。以此爲標誌,一旦你開始將孤立的任務分解成一個包,你會得到更多的快速。

另請注意,認真對待版本是非常重要的。停止根據分支機構 - 標記您的軟件,發佈版本,使用semantic versioning。如果你不這樣做,事情就會在某個時候破裂,而人們會因爲不工作或弄亂事情而詛咒你(正確)或作曲家(不正確)。

+0

將您的答案標記爲正確的額外資訊。幸運的是,我們已經在內部使用版本控制,因此肯定會給Satis一個嘗試。 – siannone

0

快速搜索,並通過Composer documentation讀取後,我發現,reposistories只能在根composer.json指定。

此外有可能在根composer.json指定使用是否允許或沒有包裝的開發版本:

"minimum-stability": "dev", 
"prefer-stable": true 

而且this issue在GitHub上是真正有用的。