0

问题

在本地磁盘的相邻目录中有三个 composer 包:foo, bar, baz. 它们都有相同composer.json的文件(除了包名):

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

我们想使用fooinside of bar。这按预期工作。

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

然后我们要使用barinside of 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包?

失败的选项

我尝试过的事情:

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

这些都不起作用。

解决方法

我能够找到一种我觉得有点脏的解决方法。事实证明,当我们首先 requirefoo和 then时bar,composer 能够解决依赖关系。

相关讨论

4

1 回答 1

1

这是通过minimum-stability设置来控制的。它stable默认设置为,这意味着 Composer 不会安装不稳定的依赖项,除非在require根项目部分明确指定了不稳定的约束。您可以通过添加到composer.json您的项目来更改它:

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

但不建议这样做,因为它会影响您项目中的所有依赖项,因此您可能会得到比您想要的更不稳定的依赖项。明确要求每个不稳定的子依赖项可以让您获得更多控制权,但一般来说,您应该避免使用具有不稳定子依赖项的包(尤其是那些定义为dev-master- 某些东西会中断只是时间问题)。

于 2020-08-24T13:52:02.933 回答