我有几个正在共同开发的库[Foo和Bar],但从技术上讲它们仍然是分开的。以前,我只是将autoloader重新定义为like "Foo\\": "../Foo/src"
,但是现在我已经向Foo添加了Guzzle依赖项,Bar翻转了它的盖子,因为它不是其依赖项之一。
目录结构:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
理论上的自动加载声明:[在Bar / composer.json中]
"require": {
"local": "../Foo/composer.json"
}
示例代码:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
如何在不设置本地Composer存储库的情况下解决此问题?我想将它们作为独立的软件包进行维护,只是一个软件包需要另一个软件包,并因此处理另一个软件包的依赖关系。
答案后编辑:
感谢infomaniac,我完成了以下工作:
初始化git repo:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
添加了作曲家配置:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
然后composer update
!
sammitch/foo
是程序包名称,实际上与它所在的位置无关。将根据其配置的存储库构造可用软件包的列表,在这种情况下,将从指定的本地git存储库中获取composer.json,然后由composer处理其余内容。该sammitch/foo
软件包vendor
将与其他任何软件包一样复制到当前应用程序的文件夹中。