【问题标题】:Loading nested packages from local directories从本地目录加载嵌套包
【发布时间】:2020-12-10 01:36:14
【问题描述】:

问题

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

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

我们想在bar 中使用foo。这按预期工作。

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

然后我们想在baz 中使用bar。这失败了。

$ 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.

为什么 composer 找不到 foo 包?

失败的选项

我尝试过的事情:

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

这些都不起作用。

解决方法

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

相关讨论

【问题讨论】:

    标签: package composer-php package-management


    【解决方案1】:

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

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

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

    【讨论】:

    • 要试一试。谢谢!
    • 我曾经认为明确指定dev-master 就足以让它成为一种级联。
    猜你喜欢
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2018-10-19
    • 2020-01-02
    相关资源
    最近更新 更多