Composer throws [ReflectionException] Класс Fxp\Composer\AssetPlugin\Repository\NpmRepository не существует

Я установил последнюю версию (1.0.0. stable) композитора и в моем проекте 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\Repository\ComposerRepository::whatProvides api. (# 2668) Итак, если вы установили fxp/composer-asset-plugin глобально, вы должны его обновить. Вы можете сделать это с помощью

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

Ответ 2

Попробуйте это, если обновление не работает.

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

Ответ 3

Я решил решить проблему, удалив каталог fxp из каталога .composer. В моей настройке это делает трюк:

rm -rf ~/.composer/vendor/fxp

Теперь, когда что-то нужно, он может просто повторно загрузить обновленный плагин.

Ответ 4

Попробуйте изменить глобальный 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-plug-in-plugin v1.0.0-beta3 требует, чтобы композитор-плагин-api 1.0.0 → не найден соответствующий пакет.

Потенциальные причины:      - Опечатка в названии пакета      - Пакет недоступен в достаточно стабильной версии в соответствии с настройкой минимальной стабильности        Подробнее см. https://getcomposer.org/doc/04-schema.md#minimum-stability.

Прочитайте https://getcomposer.org/doc/articles/troubleshooting.md для дальнейших общих проблем.

Ответ 5

В моем случае проект на 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 или удалить ее.

Ответ 6

Если ни одно из других решений не сработало для вас, попробуйте AssetPackagist в качестве альтернативы.

  • Добавьте пакеты bower-asset/bootstrap и npm-asset/jquery в composer.json, как показано ниже:

    "require": {
        "bower-asset/bootstrap": "^3.3",
        "npm-asset/jquery": "^2.2"
    }
    
  • Добавьте блок репозиториев (если у вас его еще нет, просто добавьте его) со следующим содержимым:

    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
    
  • Запустите composer install (или composer update)

  • Учитывая, что инструмент-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-плагин. В моем случае это уже было, однако оно не было обнаружено как зависимость, и описанное выше решение работало безупречно для меня - надеюсь, что это тоже сработает для вас!

Ответ 7

Вы можете сделать постоянное исправление, требуя его на глобальном уровне, а затем решить его для каждого другого проекта. Но затем убедитесь, что вы даете чаевые всем членам вашей команды.

Лучше всего добавить это в объем проекта, и он решает все таким образом.

Итак:

composer require fxp/composer-asset-plugin