【问题标题】:Don't work require in Copmposer在 Composer 中不需要工作
【发布时间】:2015-04-23 14:36:38
【问题描述】:

我在项目中有 composer.json:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "git@git.test.ua:bmp/composer.git"
        }
    ],
    "require": {
        "pack/composer": "dev-master"
    },
    "minimum-stability": "dev"
}

git@git.test.ua:bmp/composer.git - 这是我的仓库,包含下一个 composer.json 文件:

{
    "name": "pack/composer",
    "repositories": [
        {
            "type": "vcs",
            "url": "git@git.test.ua:components/curl.git"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.4.0",
        "pack/curl": "dev-master"
    },
    "autoload": {
        "psr-4": {
            "pack\\composer\\": ""
        }
    }
}

git@git.test.ua:components/curl.git - 也是我的仓库,包含下一个 composer.json 文件:

{
    "name": "pack/curl",
    "autoload": {
        "psr-4": {
            "pack\\curl\\": ""
        }
    },
    "minimum-stability": "dev"
}

当我尝试在我的项目上安装 composer 时,我收到下一个错误:

Your requirements could not be resolved to an installable set of packages.

Problem 1
- Installation request for pack/composer dev-master -> satisfiable by pack/composer[dev-master].
- pack/composer dev-master requires pack/curl dev-master -> no matching package found.

Potential causes:
- A typo in the package name
- The package is not available in a stable-enough version according to your minimum-stability setting see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.

我已经添加了参数:

"minimum-stability": "dev"

如果我从 second composer.json 文件中删除 require 部分,则不再出现错误。

"pack/curl": "dev-master"

如何解决,我需要这个?


更新:

{
    "repositories": [
        {"type": "vcs", "url": "https://git.test.ua/components/composer.git"},
        {"type": "vcs", "url": "https://git.test.ua/components/curl.git"}
    ],
    "require-dev": {
        "pack/composer": "dev-master"
    },
    "minimum-stability": "dev"
}

Loading composer repositories with package information

Updating dependencies (including require-dev)
- Installing pack/composer (dev-master 886d220)
Cloning 886d22082d4aa341731ebd87f280ee0f5a05fe37

Writing lock file
Generating autoload files

Update2 composer.lock 文件

{
    "_readme": [
        "This file locks the dependencies of your project to a known state",
        "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
        "This file is @generated automatically"
    ],
    "hash": "cc5c1fc7000544f6cfd9ba03a3ee4567",
    "packages": [],
    "packages-dev": [
        {
            "name": "pack/composer",
            "version": "dev-master",
            "source": {
                "type": "git",
                "url": "https://git.test.ua/components/composer.git",
                "reference": "886d22082d4aa341731ebd87f280ee0f5a05fe37"
            },
            "require-dev": {
                "pack/curl": "dev-master"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "pack\\composer\\": ""
                }
            },
            "time": "2015-04-24 07:13:31"
        }
    ],
    "aliases": [],
    "minimum-stability": "dev",
    "stability-flags": {
        "pack/composer": 20
    },
    "prefer-stable": false,
    "prefer-lowest": false,
    "platform": [],
    "platform-dev": []
}

【问题讨论】:

  • 如果我尝试从 seccond composer.json 文件中安装 composer 就可以了。但它不适用于第一个文件。
  • 是 pack/technical_session == pack/technical 吗?
  • 这里复制代码是我的错。修复它,问题仍然存在。

标签: composer-php


【解决方案1】:

Composer 不会递归浏览存储库,即所有可能包含软件的存储库都必须在根 composer.json 文件中提及。

你没有提到 pack/curl 包的存储库,所以 Composer 找不到这个包。

我假设“pack”是您在问题中部分添加的供应商名称,因为错误消息仍然提到“shkarbatov”作为供应商名称。

避免在各处添加数百个个人存储库的最佳方法是拥有一个类似于打包师的 Composer 存储库,它随处提及并包含所有代码存储库的元数据。看看Satis。

更新:

现在看到您的 composer.lock 文件后,情况就很清楚了:您不是使用 require 添加包,而是使用 require-dev。这仅适用于根包的开发依赖项(例如添加 PHPUnit 或开发包所需的东西) - 不会安装添加到根包的包的任何开发依赖项。

将生产使用所需的包的依赖关系更改为require所有级别!

【讨论】:

  • 关于 shkarbatov 作为供应商名称,这是我在这里复制代码时的错误,已修复。
  • 尝试在我的 composer.json 文件中添加所有存储库,但这无济于事。没有错误,但 composer 只下载第一个包。
  • 如果 composer 没有找到任何东西,它就不会安装任何东西。如果它安装一个包,那么它可以成功运行。没有错误消息证明了这一点。请注意,您可能已经克隆了一个软件包的存储库。重新开始:删除vendor 文件夹(注意不要删除要保留的工作)并再次运行composer update。它应该克隆/下载你需要的每个包,并列出它。
  • 很遗憾没有。我删除了供应商文件夹,然后运行 ​​composer update,但它只下载一个包。
  • 能否将修改后的composer.json 和更新运行的结果添加到您的问题中,好吗?
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多