composer php需要本地包
我有几个图书馆(Foo and Bar),我正在协同开发,但在技术上还是独立的。 以前我刚刚重新定义自动加载器喜欢"Foo\\": "../Foo/src"
,但现在我已经添加了一个Guzzle依赖项到Foo,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回购? 我想维护这些作为单独的包,只是一个需要另一个,因此处理其他的依赖关系。
回答后编辑:
感谢信仰者,我做了以下几件事:
初始化的git回购:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
添加了composer phpconfiguration:
"require": { "sammitch/foo": "dev-master" }, "repositories": [{ "type": "vcs", "url": "/home/sammitch/src/Foo" }],
然后composer update
!
您可以使用Composer的存储库function
https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository
而不是使用http格式,请在磁盘上指定一个文件path。
链接到本地开发包的方法是首先在主项目的composer.json
一个存储库 ,如下所示:
"repositories": [ { "type": "path", "url": "/full/or/relative/path/to/development/package" } ]
您还需要在您的开发包的composer.json
指定一个版本,或者我的方式是要求使用@dev
的包,如下所示:
composer require "vendorname/packagename @dev"
它应该输出:
- Installing vendor/packagename (dev-develop) Symlinked from /full/or/relative/path/to/development/package
require命令中的@dev
非常重要,composer使用它来获取源代码并将其链接到新包中。
这是一个稳定标志添加到版本约束(见包链接 )。
这些允许您进一步限制或扩大包装的稳定性超出最小稳定性设置的范围。
最小稳定性标志是:
可用选项(按稳定性顺序)是
dev
,alpha
,beta
,RC
和stable
。