我有一个目录结构如下:
composer.json < Main
packages/
balunker/
testpackage/
composer.json < Package
src/
TestPackage.php
主composer.json
如下所示:
{
"name": "vagrant/composer-test",
"repositories": [
{
"type": "path",
"url": "packages/*/*"
}
],
"require": {
"balunker/testpackage": "*"
}
}
而包composer.json
看起来是这样的:
{
"name": "balunker/testpackage",
"autoload": {
"psr-4": {
"Balunker\\": "src/"
}
}
}
在composer update
上,我只是得到一个消息,软件包无法解析。没有创建符号链接,也没有安装软件包。我花了半天的时间来解决这个问题,没有任何成功。
我还上传了一个composer update -vvv
的详细输出:http://pastebin.com/mMRHsACk.
我的composer版本是最新的(截至2016年4月20日2:39pm UTC),所有这些都在Vagrant(Debian)中运行。
我非常感谢您的任何推荐,我真的不知道还能做些什么。
7条答案
按热度按时间7fyelxc51#
我也在Github上发布了这个问题,结果发现文档有点误导。它说:
但是,如果您只有一个本地存储库而没有发布,则必须用途:
版本
dev-master
是这里的关键(考虑到您正在处理master分支),这有点令人恼火,但感谢一些有帮助的 composer 贡献者,我终于可以掌握这个问题了。fcipmucu2#
帮助我解决的是
composer clear-cache
,然后运行composer update
。**解释:**我最初尝试
composer install my/package
,但在依赖版本上失败。因此我需要进行一些本地修改,使其与Laravel 6.0一起工作。但是,它继续检查错误版本的Laravel软件包,这使我相信它看不到我在repositories
密钥中使用"type": "path"
设置的本地存储库。我首先确保路径存在,并且我位于正确的分支上(master
,这就是为什么我在composer.json
中使用dev-master
)。一旦我清除了 composer 缓存并运行更新,它就使用我的本地路径进行更新,没有依赖问题。shstlldc3#
对我来说,问题是我忘了用docker挂载repository文件夹,所以本地Web服务器无法访问它。
eoxn13cs4#
对我有效的方法与上面的方法非常相似,但是我必须明确地针对我正在开发的分支。
假设代码位于目录/newapp中,与/app处于同一级别,并且有一个名为feature/the-new-package的分支:
* 不起作用,dev-master也不起作用,它必须是dev-feature/the-new-package。
bis0qfac5#
对于未来的Google用户,请将您的版本添加到
composer.json
,然后要求使用带有--prefer-source
选项的软件包。例如:
composer require your-vendor/package:1.0.* --prefer-source
svujldwt6#
如果包已经从原始存储库安装,Composer似乎会感到困惑:它获取本地存储库并从 composer.json 刷新 composer.lock,但甚至不尝试将更改获取到供应商目录。
首先删除它似乎可以解决这个问题:
jhiyze9q7#
在我的例子中,我的问题是存储库优先级,“当Composer解析依赖关系时,它将在最顶层的存储库中查找给定的包”,检查https://getcomposer.org/doc/articles/repository-priorities.mdTLDR;在composer.json中,确保您的本地路径位于存储库的前面