我正在拆分一些个人代码,以模块化并在不同的项目中重用它们。 我最近开始使用 Composer,并使用它在我的项目中引用这些模块。
到目前为止,以下内容对我有用:
First project composer.json
{
"name": "mpf/apimodule",
"version":"dev-main",
"autoload": {
"psr-4": {
"APIModule\\":"classes/"
}
}
}
Second project composer.json
{
"name": "mpf/crawler",
"version":"dev-main",
"autoload": {
"psr-4": {
"API\\": "classes/"
}
},
"repositories": [
{
"type": "vcs",
"url": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b2d5dbc6f2d5dbc6dac7d09cd1dddf" rel="noreferrer noopener nofollow">[email protected]</a>:{User}/{Repo}.git"
}
],
"require": {
"fabpot/goutte": "^3.2",
"mpf/apimodule": "dev-main"
}
}
两位 Composer 都已编译,项目按预期工作。
但是当我尝试添加第三层时
Third project composer.json
{
"autoload": {
"psr-4": {
"API\\": "classes/"
}
},
"repositories": [
{
"type": "vcs",
"url": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="98fff1ecd8fff1ecf0edfab6fbf7f5" rel="noreferrer noopener nofollow">[email protected]</a>:{User}/{Repo}.git"
}
],
"require": {
"mpf/crawler": "dev-main"
}
}
运行 Composer 更新命令时出现以下错误
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires mpf/crawler dev-main -> satisfiable by mpf/crawler[dev-main].
- mpf/crawler dev-main requires mpf/apimodule dev-main -> could not be found in any
version, there may be a typo in the package name.
我发现了类似的问题,但我的存储库都是公共(public)的,这就是他们的问题。
我尝试运行composer -vvv/composerdiagnose,但在结果中找不到任何有用的信息。
最佳答案
根据问题中给出的描述,您将存储库添加到 root composer.json
文件中。只要您使用根 composer.json
文件,这种方法就可以正常工作。那是具有这个文件的项目。
现在,虽然这适用于每个项目,但当您将第三个(或第四个、第五个等)composer.json
文件放入混合中时,或者按照您的说法 “添加第三层”,它停止工作。
从技术上讲,它不会停止工作,但是 Composer 无法再解析该继承的存储库来解析根依赖关系:
- Root composer.json requires mpf/crawler dev-main \ -> satisfiable by mpf/crawler[dev-main]. - mpf/crawler dev-main requires mpf/apimodule dev-main \ -> could not be found in any version, there may be a typo in the package name.
尽管 Composer 很诚实,但您的情况可能会令人困惑。您当然已经仔细检查过没有拼写错误,但 Composer 仍然找不到任何版本。
这是因为 Composer 仅使用来自 root composer.json
的 composer.json#/repositories
配置 - 即文件本身。让我们想象一下这一点:
composer.json
vendor/mpf/crawler/composer.json
我有根据的猜测是,尽管您已将 mpf/crawler
的存储库添加到 composer.json
mpf/apimodule
的存储库> 尚未添加到其中,仅添加到 vendor/mpf/crawler/composer.json
中。
修复很简单,添加您的根项目所需的所有存储库来解决该项目的所有依赖关系配置文件(您安装依赖项的项目中的composer.json
)。
如果你仔细思考一下,可能会更清楚为什么会这样:
从composer.json
安装时,所有存储库都应该已经定义,否则安装的结果将纯粹是运气游戏。软件包将能够覆盖您的存储库配置,您将不再受控制。
我对继续您的旅程的建议:
- 在您的root
composer.json
文件中添加存储库,以确保您的项目配置完成。 (目标:了解根配置、项目级别) - 使用此方法时,请考虑您是否想要对存储库进行全局配置。也就是说,您可以在计算机用户级别配置跨项目(在该主机上)共享的存储库列表。 (目标:了解全局配置、主机级别、使用项目)
- 对 Composer 提供的不同类型的存储库进行 Safari 浏览(比较 with the documentation ),因为您可能会在其中找到更多内容(例如路径存储库、您可以共享的另一个中央 .json 文件等 - 有相当多的选项) 。 (目标:了解不同的存储库配置类型)
关于composer-php - 尝试包含多级公共(public)个人存储库时出现 Composer 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74765807/