从本地目录加载嵌套包

问题描述

问题

在本地磁盘上的相邻目录中有三个composer软件包:foobarbaz。它们都有相同的composer.json文件(包名称除外):

{
    "name": "acme/foo",#   "name": "acme/bar",#   "name": "acme/baz","repositories": [
        {
            "type": "path","url": "../*"
        }
    ]
}

我们要在foo内使用bar。这可以按预期工作。

$ cd /home/acme/bar
$ composer require acme/foo:dev-master

然后,我们要在bar内使用baz。这会失败。

$ cd /home/acme/baz
$ composer require acme/bar:dev-master
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for acme/bar dev-master -> satisfiable by acme/bar[dev-master].
    - acme/bar dev-master requires acme/foo dev-master -> no matching package found.

为什么作曲家找不到foo软件包?

失败的选项

我尝试过的事情:

  • 为每个程序包使用单独的存储库
  • 使用绝对存储库路径
  • 禁用符号链接

这些都不起作用。

解决方法

我找到了一个变通的解决方法。事实证明,当我们首先需要foo然后又需要bar时,作曲者便能够解决依赖关系。

相关讨论

解决方法

这由minimum-stability设置控制。默认情况下将其设置为stable,因此,除非在根项目的require部分中明确指定了不稳定约束,否则Composer将不会安装不稳定依赖关系。您可以通过添加到项目的composer.json来更改此设置:

"minimum-stability": "dev","prefer-stable": true,

但是不建议这样做,因为它会影响项目中的所有依赖关系,因此您可能会得到比所需更多的不稳定依赖关系。明确要求每个不稳定的子依赖关系都可以为您提供更多的控制权,但是通常,您应避免使用具有不稳定的子依赖关系的程序包(尤其是那些定义为dev-master的程序包-某些事情会中断只是时间问题)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...