在任何版本中都找不到 Composer 包

Posted

技术标签:

【中文标题】在任何版本中都找不到 Composer 包【英文标题】:Composer package not found in any version 【发布时间】:2022-01-08 20:09:21 【问题描述】:

我正在尝试创建一个自定义供应商包,但尚未将包放在 packagist 上。根据文档,可以从 git (vcs) 而不是 packagist 加载包:https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository

yii2 项目(虽然不认为框架很重要)我在 vendor 文件夹中创建了包:

foundationize/yii2-foundation (文件夹结构如上,我已经四重检查了)。

我的根 public_html/composer.json 有以下条目:

"minimum-stability": "dev",
    "require": 
        "php": ">=5.4.0",
        "yiisoft/yii2": ">=2.0.5",
        "yiisoft/yii2-swiftmailer": "*",
        "foundationize/yii2-foundation": "dev-master" 
    ,

我的包 composer 文件 vendor/foundationize/yii2-foundation/composer.json 看起来像:


    "name": "foundationize/yii2-foundation",
    "description": "The Foundation extension for the Yii2 framework",
    "keywords": ["yii2", "foundation"],
    "type": "yii2-extension",
    "license": "BSD-3-Clause",
    "support": 
        "issues": "https://github.com/foundationize/yii2-foundation/issues",
        "wiki": "https://github.com/foundationize/yii2-foundation/wiki",
        "source": "https://github.com/foundationize/yii2-foundation.git"
    ,
    "authors": [
        
            "name": "gvanto",
            "email": "gvanto@hotmail.com",
            "homepage": "http://foundationize.com"
        
    ],
    "require": 
        "yiisoft/yii2": "*"
    ,
    "autoload": 
        "psr-4": 
            "foundationize\\foundation\\": ""
        
    ,
    "repositories": [
        
            "packagist": false,
            "type": "vcs",
            "url": "https://github.com/foundationize/yii2-foundation.git"           
        
    ]       

当我运行 composer install(或更新)时,我不断收到以下错误:

您的要求无法解决为一组可安装的 包。

问题 1 - 请求的包foundationize/yii2-foundation在任何版本中都找不到,可能包名有错别字。

潜在原因:

包名有错别字 根据您的最低稳定性设置,该软件包在足够稳定的版本中不可用,请参阅 https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion 了解更多详情。

阅读https://getcomposer.org/doc/articles/troubleshooting.md 更多常见问题。

我用谷歌搜索了它的高低,阅读文档似乎无法让它工作(总是同样的错误,我实际上认为如果它说找不到包或不正确的包会更有用版本已找到)。

【问题讨论】:

【参考方案1】:

您必须将repositories 条目添加到您的根composer.json 文件中。否则,Composer 不知道在哪里搜索您的包。

【讨论】:

谢谢 xabbuh,这似乎效果更好......谢谢!我不明白的是(如果存储库源位于根 composer.json 中)作曲家如何知道从 vcs 源获取哪个包以及从 packagist 获取哪个包?我只希望在 github(自定义源)上找到一个包(foundationize/yii2-foundation),而不是其他包.. Composer 将仅使用 Packagist 以外的其他来源作为包,如果您配置了包含有关它的信息并且满足版本约束的存储库。所以如果你只为foundationize/yii2-foundation包添加GitHub存储库,所有其他包都将通过Packagist加载。 “所以,如果你只为 Foundationize/yii2-foundation 包添加 GitHub 存储库”-> 但我不是:我将它放在 root 中 - 这就是我的意思,因为我是指定根目录下的“存储库”字段(不是包本身),这个源是如何绑定/链接到这个包的?是名字吗?本来希望能够在包的 composer.json 文件(不是根目录)中指定一个包的源(如果你愿意的话,可以覆盖)......抱歉混淆我认为作曲家文档对此不太清楚 我的意思是,您添加到 composer.json 文件的 GitHub 存储库是 github.com/foundationize/yii2-foundation.git,它只定义了 foundationize/yii2-foundation。 Composer 将克隆该存储库,检查其 composer.json 文件,因此将知道该包位于该存储库中(因为配置中的 name 键)。 OK 似乎是一种稍微颠倒的做事方式(如果我直接告诉作曲家在哪里可以找到这个包的源代码不是更容易吗?)但我确信他们是有原因的那样做。感谢 xabbuh 的帮助!【参考方案2】:

有一个类似的问题,这是因为我在新的 Drupal 结构的 /web 目录中运行 composer。当我在根目录下运行它时,一切都很好。烦人的是,你需要在 /web 中运行 Drush

【讨论】:

【参考方案3】:

从 Laravel 5.5 版本开始有了 Package Auto-Discovery 功能,所以不需要添加服务提供者。你只需要像这样注册包:

composer 需要 barryvdh/laravel-debugbar:dev-master

您可以在这些文章中找到更多信息:

https://medium.com/@taylorotwell/package-auto-discovery-in-laravel-5-5-ea9e3ab20518 https://divinglaravel.com/laravels-package-auto-discovery

【讨论】:

以上是关于在任何版本中都找不到 Composer 包的主要内容,如果未能解决你的问题,请参考以下文章

您的捆绑包被锁定为 mimemagic (0.3.5),但在您的 Gemfile 中列出的任何源中都找不到该版本 [重复]

React 在任何根目录中都找不到入口文件

带有 Docker 的 Rails '在任何资源中都找不到 ...' 用于现有的 gem

在以下任何来源中都找不到插件 [id: 'org.sonarqube', version: '2.8']:

在以下任何来源中都找不到插件 [id: 'org.springframework.boot', version: '2.2.4.RELEASE']:

在查询的任何表中都找不到列 ( )(或 SLV 未定义)。 SQLCODE=-217