我有一个这样的目录结构:
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。
我的作曲家版本是最新的(截至 2016 年 4 月 20 日下午 2:39 UTC),所有这些都在 Vagrant (Debian) 中运行。
非常感谢从这里的任何建议。我真的不知道还能做什么了。
在Github上发布了这个问题,事实证明文档有点误导。它说:
{
"repositories": [
{
"type": "path",
"url": "../../packages/my-package"
}
],
"require": {
"my/package": "*"
}
}
但是,如果只有一个没有版本的本地存储库,则必须使用:
{
"repositories": [
{
"type": "path",
"url": "../../packages/my-package"
}
],
"require": {
"my/package": "dev-master"
}
}
版本 dev-master
是这里的键(假设您正在处理主分支)。这有点令人愤怒,但多亏了一些乐于助人的作曲家贡献者,我终于可以掌握这一点。
帮助我解决问题的是composer clear-cache
然后运行composer update
。
解释:我最初试图composer install my/package
在依赖项版本上失败。所以我需要进行一些局部修改,使其与Laravel 6.0配合使用。但是,它继续检查错误的Laravel软件包版本,这使我相信它没有看到我在repositories
键中设置的本地存储库"type": "path"
。我首先确保路径存在并且我在正确的分支上(master
这就是为什么我在composer.json
中使用dev-master
的原因)。一旦我清除了作曲家缓存并运行更新,它就会使用我的本地路径进行更新,没有依赖问题。
"repositories": [
{
"type": "path",
"url": "../libs/package-name"
}
],
"require-dev": {
"pkg-maintainer/package-name": "dev-master"
}
对我来说,问题是我忘记使用 docker 挂载存储库文件夹,因此本地 Web 服务器无法访问它。也要注意这一点
对我有用的方法与上述非常相似,但我必须专门针对我正在开发的分支。
假设目录/newapp 中的代码与/app 处于同一级别,并且有一个名为 feature/the-new-package 的分支:
"repositories": [
{
"type": "path",
"url": "newapp"
}
],
"require": {
"package/newapp": "dev-feature/the-new-package"
},
\* 不起作用,dev-master 也没有。它必须是开发功能/新包。
对于未来的 Google 员工,请将您的版本添加到composer.json
,然后要求使用--prefer-source
选项的软件包。
例如:composer require your-vendor/package:1.0.* --prefer-source
软件包已经从原始存储库安装,Composer似乎会感到困惑:它获取您的本地存储库并从其composer.json刷新composer.lock,但甚至不会尝试将更改提取到供应商目录中。
首先删除它似乎可以解决它:
composer remove foo/bar
composer require foo/bar @dev
就我而言,我的问题是存储库优先级,"当 Composer 解析依赖项时,它将在最顶层的存储库中查找给定的包",请检查 https://getcomposer.org/doc/articles/repository-priorities.mdTLDR;在 composer.json 中,确保本地路径在存储库下排在第一位
"repositories": [
{
"type": "path",
"url": "packages/local-path-goes-first"
},
{
"type": "vcs",
"url": "https://github.com/berrugo/other-repos"
}
],
添加"minimum-stablilty": "dev"
是正确安装本地软件包的关键。
这种格式对我来说也很好用;它不仅说明了包名称,而且干净且易于阅读。
"minimum-stability": "dev",
"repositories": {
"foo/bar": {
"type": "path",
"url": "/Users/username/Sites/packages/packageName",
"options": {
"symlink": true
}
}
}