Я установил последнюю версию (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)
Может кто-нибудь помочь мне, как это исправить?
Вот мой композитор.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" } } }
Около девяти дней назад Composer\Repository\ComposerRepository::whatProvides
api изменился. ( # 2668 ) Итак, если вы установили fxp/composer-asset-plugin
глобально, вы должны его обновить. Вы можете сделать это с помощью:
php composer.phar global update fxp/composer-asset-plugin --no-plugins
Попробуйте это, если обновление не работает.
composer global require fxp/composer-asset-plugin --no-plugins
Я решил решить проблему, удалив каталог fxp
из каталога .composer
. В моей настройке это делает трюк:
rm -rf ~/.composer/vendor/fxp
Теперь, когда что-то нужно, он может просто повторно загрузить обновленный плагин.
Попробуйте отредактировать свой глобальный composer.json
, запустив:
vi ~/.composer/composer.json
тогда убедитесь, что у вас есть эта строка:
{ "require": { "fxp/composer-asset-plugin": "1.1.*" } }
приведенные выше ответы не сработали для меня, потому что версия моего fxp/composer-asset-plugin
была как 1.1-beta04
, когда я изменил ее на "1.1.8"
и 1.1-beta04
команду обновления:
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-v1.0.0-beta3 требует, чтобы композитор-plugin-api 1.0.0 -> не нашел подходящего пакета.
Потенциальные причины: – Опечатка в имени пакета. Пакет недоступен в достаточно стабильной версии в соответствии с настройкой минимальной стабильности см. https://getcomposer.org/doc/04-schema.md#minimum-stability для более подробно.
Прочтите https://getcomposer.org/doc/articles/troubleshooting.md для получения дополнительных общих проблем.
Если ни одно из других решений не сработало для вас, попробуйте 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
)
Учитывая, что 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 composer global show
– Полезно проверить, установлен ли у вас установленный fxp / composer-asset-plugin . В моем случае это уже было, однако оно не было обнаружено как зависимость, и решение, которое я описал ранее, работало безупречно для меня – надеюсь, что это сработает и для вас!
В моем случае проект на 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
вам нужно заменить vendor/fxp
composer-asset-plugin
или удалить его.
Вы можете сделать постоянное исправление, требуя его на глобальном уровне, а затем оно будет разрешено для каждого другого проекта. Но затем убедитесь, что вы даете чаевые всем членам вашей команды.
Лучше всего добавить это в объем проекта, и он решает все таким образом.
Так:
composer require fxp/composer-asset-plugin