我尝试使用composer并创建自己的包。我的包项目具有以下文件结构:
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": "git@github.com:david/scheduler.git",
"type": "git",
"reference": "master"
}
}
}
],
"require": {
"david/scheduler": "dev-master"
}
当我运行composer update时,github项目将被克隆并存储在vendor目录中。但只有我的包裹。不会加载对symfony / yaml的依赖。
vendor
composer
david/scheduler
另外,composer会创建一个空的autoload_psr4文件。
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
);
我想我的架构可能存在一些问题......
答案 0 :(得分:1)
您的问题是您使用package
类型注册自定义存储库,这意味着根包定义了david/scheduler
的元数据,并且git repo中的composer.json文件永远不会由Composer使用。并且在此包定义中,不依赖于symfony/yaml
组件,也没有自动加载Scheduler类。
作为一般规则,package
存储库应始终被视为最后的手段(它有许多缺点)。当你控制git存储库时,将composer.json文件放在存储库中并使用vcs
存储库工作得更好(因为作曲家可以依赖来自git本身的元数据,并且包中提供了包元数据) git repo)。
root包应如下所示:
{
"repositories": [
{
"type": "vcs",
"url": "git@github.com:david/scheduler.git"
}
],
"require": {
"david/scheduler": "dev-master"
}
}