2016-03-22 184 views
0

我正在嘗試與作曲家合作,並將創建自己的包。我包項目具有以下文件結構:作曲家自動加載錯誤

scr/Scheduler.php 
.gitignore 
composer.json 

測試類:

namespace david\Scheduler; 

use Symfony\Component\Yaml\Parser; 

class Scheduler 
{ 
    private $yamlParser; 

    public function __construct() 
    { 
     $this->yamlParser = new Parser(); 
    } 
} 

和composer.json文件

... 
"require": { 
    "symfony/yaml": "~3.0.3" 
}, 
"autoload": { 
    "psr-4": { 
     "david\\Scheduler\\": "src/" 
    } 
} 

這一切我一直致力於私人github上庫。目前我只有主分支,沒有標籤。 我的第二個步驟是創建一個具有以下composer.json文件在客戶端項目:

"repositories": [ 
    { 
     "type": "package", 
     "package": { 
      "name": "david/scheduler", 
      "type": "package", 
      "version": "dev-master", 
      "source": { 
       "url": "[email protected]:david/scheduler.git", 
       "type": "git", 
       "reference": "master" 
      } 
     } 
    } 
], 
"require": { 
    "david/scheduler": "dev-master" 
} 

當我運行作曲家更新GitHub的項目將被複制並存儲在供應商目錄。但只有我的包。不會加載對symfony/yaml的依賴。

vendor 
    composer 
    david/scheduler 

另外composer創建一個空的autoload_psr4文件。

$vendorDir = dirname(dirname(__FILE__)); 
$baseDir = dirname($vendorDir); 

return array(
); 

我想也許有在我的建築有些問題......

+0

你可以告訴你註冊的主體工程專用庫的方式嗎?你可以混淆網址以保持私密 –

+0

@ChristopheCoevoet我已經更新了composer.json片段。另外,我在描述中加入了以下內容:「目前我只有主分支,沒有標籤。」 – David

+0

我假設你在代碼片段的錯誤部分添加了'repositories'部分(因爲它沒有意義在'david/scheduler'庫中引用'david/scheduler')。基於這個我在下面回答。 –

回答

1

你的問題是,您要註冊使用package型定製庫,這意味着根包被定義的元數據david/scheduler和composer.json文件在git倉庫中不會被Composer使用。並且在此包定義中,不存在對symfony/yaml組件的依賴關係,也不會爲您的Scheduler類自動加載。

作爲一般規則,package存儲庫應始終被視爲最後的手段(它有許多缺點)。當你控制git倉庫時,將一個composer.json文件放入倉庫並使用vcs倉庫工作得更好(因爲作曲家可以依賴來自git本身的元數據,並且軟件包元數據在包git倉庫中提供)。

根包應該是這樣的:

{ 
    "repositories": [ 
     { 
      "type": "vcs", 
      "url": "[email protected]:david/scheduler.git" 
     } 
    ], 
    "require": { 
     "david/scheduler": "dev-master" 
    } 
}