首页 文章

Composer throws [ReflectionException]类Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository不存在

提问于
浏览
79

我安装了最新版本(1.0.0 . 稳定版)的作曲家,在我的Yii2项目中输入了这个:

php composer.phar update

它给了我这个错误:

[ReflectionException]类Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository不存在

[ErrorException]声明Fxp \ Composer \ AssetPlugin \ Repository \ AbstractAssetsRepository :: whatProvides()应该与Composer \ Repository \ ComposerRepository :: whatProvides(Composer \ DependencyResolver \ Pool $ pool,$ name,$ bypassFilters = false)兼容

有人可以帮我解决这个问题吗?

这是我的composer.json

{
    "name": "yiisoft/yii2-app-advanced",
    "description": "Yii 2 Advanced Project Template",
    "keywords": ["yii2", "framework", "advanced", "project template"],
    "homepage": "http://www.yiiframework.com/",
    "type": "project",
    "license": "BSD-3-Clause",
    "support": {
        "issues": "https://github.com/yiisoft/yii2/issues?state=open",
        "forum": "http://www.yiiframework.com/forum/",
        "wiki": "http://www.yiiframework.com/wiki/",
        "irc": "irc://irc.freenode.net/yii",
        "source": "https://github.com/yiisoft/yii2"
    },
    "minimum-stability": "stable",
    "require": {
        "php": ">=5.4.0",
        "yiisoft/yii2": ">=2.0.6",
        "yiisoft/yii2-bootstrap": "*",
        "yiisoft/yii2-swiftmailer": "*",
        "kartik-v/yii2-widget-fileinput": "@dev",
        "golonka/bbcodeparser": "^2.2"
    },
    "require-dev": {
        "yiisoft/yii2-codeception": "*",
        "yiisoft/yii2-debug": "*",
        "yiisoft/yii2-gii": "*",
        "yiisoft/yii2-faker": "*"
    },
    "config": {
        "process-timeout": 1800
    },
    "extra": {
        "asset-installer-paths": {
            "npm-asset-library": "vendor/npm",
            "bower-asset-library": "vendor/bower"
        }
    }
}

7 回答

  • 1

    大约九天前(2016年3月底左右), Composer\Repository\ComposerRepository::whatProvides api改变了 . (#2668)因此,如果您已全局安装 fxp/composer-asset-plugin ,则应更新它 . 你可以这样做:

    php composer.phar global update fxp/composer-asset-plugin --no-plugins
    
  • 22

    如果更新不起作用,请尝试此操作 .

    composer global require fxp/composer-asset-plugin --no-plugins
    
  • -1

    我最终通过从 .composer 目录中删除 fxp 目录来解决问题 . 在我的设置上,这可以解决问题:

    rm -rf ~/.composer/vendor/fxp
    

    现在当需要它时,它可以重新下载更新的插件 .

  • 57

    尝试通过运行来编辑全局 composer.json

    vi ~/.composer/composer.json 然后确保你有这一行:

    {
        "require": {
            "fxp/composer-asset-plugin": "1.1.*"
        }
    }
    

    以上答案对我不起作用,因为我的 fxp/composer-asset-plugin 的版本就像 1.1-beta04 ,当我将其更改为 "1.1.8" 并运行更新命令时:

    php /usr/bin/composer global update fxp/composer-asset-plugin --no-plugins
    

    它解决了这个问题 . 但没有编辑我的全局 composer.json ,它给了我这个错误:

    您的要求无法解析为可安装的软件包集 . 问题1 - fxp / composer-asset-plugin 1.0.0-beta3的安装请求 - > fxp / composer-asset-plugin [v1.0.0-beta3]可满足 . - fxp / composer-asset-plugin v1.0.0-beta3需要composer-plugin-api 1.0.0 - >找不到匹配的包 . 可能的原因: - 包名称中的拼写错误 - 根据您的最小稳定性设置,包中没有足够稳定的版本,请参阅https://getcomposer.org/doc/04-schema.md#minimum-stability for更多细节 . 阅读https://getcomposer.org/doc/articles/troubleshooting.md以了解更多常见问题 .

  • 6

    在我的Yii2项目中

    $ composer
    
      [ReflectionException]
      Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
    
    
      [ErrorException]
      Declaration of Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRepository
      ::whatProvides() should be compatible with Composer\Repository\ComposerRepo
      sitory::whatProvides(Composer\DependencyResolver\Pool $pool, $name, $bypass
      Filters = false)
    

    Yii2,在文件夹 vendor/fxp 中,您需要替换文件夹 composer-asset-plugin 或将其删除 .

  • 2

    如果其他解决方案都不适合您,请尝试AssetPackagist作为替代方案 .

    • packages bower-asset / bootstrap和npm-asset / jquery添加到composer.json,如下所示:
    "require": {
        "bower-asset/bootstrap": "^3.3",
        "npm-asset/jquery": "^2.2"
    }
    
    • 使用以下内容添加 repositories 块(如果您还没有,只需附加一个):
    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
    
    • 运行 composer install (或 composer update

    • 考虑到 asset-packagist 将资产安装在不同的目录中,请将以下行添加到应用程序配置中(通常称为web.php):

    $config = [
        'aliases' => [
            '@bower' => '@vendor/bower-asset',
            '@npm'   => '@vendor/npm-asset',
        ],
    ];
    

    这些说明可能会随时间而变化 . 它们已经从repo网站复制,因此它们可以及时使用,以防网站出现问题 . 我不是回购的作者,但我真的很感激所做的努力 . 请检查https://asset-packagist.org/site/about以了解有关该项目的更多信息 .


    如果你正在努力学习作曲家,你可以在这里找到一些有用的命令:

    composer clear-cache - 清除与作曲家相关的缓存

    composer install -vvv - 添加参数"vvv"以显示与安装过程相关的输出(对调试很有用)

    composer global show - 用于检查是否已安装 fxp/composer-asset-plugin . 在我的情况下,它已经是,但它没有被检测为依赖,并且我之前描述的解决方案对我来说毫无瑕疵 - 希望它对你也有效!

  • 177

    您可以通过在全局级别要求它来进行永久性修复,然后针对每个其他项目进行解决 . 但请确保您向所有团队成员提供建议 .

    最好是在项目范围内添加它,并以这种方式解决所有人 .

    所以:

    composer require fxp/composer-asset-plugin

相关问题