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