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


80

我安装了最新版本的(1.0.0。stable)composer,在我的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"
        }
    }
}

1
你能告诉我们你的composer.json吗?
Federkun's

@Federico在那里
MarkoMikulić16年

Answers:


182

大约9天前(大约2016年3月底),Composer\Repository\ComposerRepository::whatProvidesapi发生了变化。(#2668)因此,如果已fxp/composer-asset-plugin全局安装,则应对其进行更新。您可以执行以下操作:

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

4
不幸的是,该命令以相同的错误结束。通过删除~/.composer目录并重新安装来解决fxp/composer-asset-plugin
ezze 2016年

4
感谢您的反馈,我--no-plugins为答案添加了选项。
Federkun '16

2
没有帮助。第二个电话后,我收到“没有安装或更新的内容”。然后更新将再次产生相同的错误。还有其他想法吗?
robsch 2016年

1
像魅力一样工作。Thx
MrD 2016年

1
我仍然
遇到


22

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

rm -rf ~/.composer/vendor/fxp

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


2
对于使用Windows的用户:C:\ Users \ <UserId> \ AppData \ Roaming \ Composer \ vendor
Jesse Q

7

尝试composer.json通过运行以下命令来编辑全局变量:

vi ~/.composer/composer.json 然后确保上面有这行:

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

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

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

它解决了问题。但是没有编辑我的global 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为更多细节。

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


2

就我而言,关于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或将其删除。


1

如果没有其他解决方案对您有用,请尝试使用AssetPackagist作为替代方案。

  1. 软件包 bower-asset / bootstrapnpm-asset / jquery添加到composer.json中,如下所示:

    "require": {
        "bower-asset/bootstrap": "^3.3",
        "npm-asset/jquery": "^2.2"
    }
    
  2. 添加一个具有以下内容的存储库块(如果仍然没有,如果有,只需追加):

    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
    
  3. 运行composer install(或composer update

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

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

这些说明可能会随着时间而改变。它们是从回购网站复制而来的,因此它们可以持续使用,以防万一该网站出现问题。我不是该回购协议的作者,但我非常感谢为此付出的努力。请检查https://asset-packagist.org/site/about,以了解有关该项目的更多信息。


如果您在作曲家中苦苦挣扎,这里有一些有用的命令:

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

composer install -vvv -添加参数“ vvv”以显示与安装过程相关的输出(用于调试)

composer global show-有助于检查您是否已经安装了fxp / composer-asset-plugin。就我而言,它已经存在,但是并未被检测为依赖项,而我先前描述的解决方案对我来说也完美无缺-希望它也对您有用!


-1

您可以通过在全局级别上进行永久性修复来解决此问题,然后为其他所有项目解决。但是,请确保将提示提供给所有团队成员。

最好是在项目范围内添加此代码,然后以这种方式解决每个人。

所以:

composer require fxp/composer-asset-plugin

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.