Zainstalowałem najnowszą wersję (1.0.0. Stabilną) kompozytora iw moim projekcie Yii2 wpisałem:
php composer.phar update
Daje mi ten błąd:
[ReflectionException] Klasa Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository nie istnieje
[ErrorException] Deklaracja Fxp \ Composer \ AssetPlugin \ Repository \ AbstractAssetsRepository :: whatProvides () powinna być zgodna z Composer \ Repository \ ComposerRepository :: whatProvides (Composer \ DependencyResolver \ Pool $ pool, $ name, $ bypassFilters = false)
Czy ktoś może mi pomóc, jak to naprawić?
Oto mój plik 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"
}
}
}
php
yii2
composer-php
Marko Mikulić
źródło
źródło
composer.json
?Odpowiedzi:
Około dziewięć dni temu (pod koniec marca 2016 r.)
Composer\Repository\ComposerRepository::whatProvides
Interfejs API się zmienił. ( # 2668 ) Jeśli więc zainstalowałeś gofxp/composer-asset-plugin
globalnie, powinieneś go zaktualizować. Możesz to zrobić za pomocą:php composer.phar global update fxp/composer-asset-plugin --no-plugins
źródło
~/.composer
katalogu i ponowną instalacjęfxp/composer-asset-plugin
.--no-plugins
opcję do odpowiedzi.Spróbuj tego, jeśli aktualizacja nie działa.
composer global require fxp/composer-asset-plugin --no-plugins
źródło
Ostatecznie rozwiązałem problem, usuwając
fxp
katalog z.composer
katalogu. W mojej konfiguracji to załatwia sprawę:Teraz, gdy coś tego potrzebuje, może po prostu ponownie pobrać zaktualizowaną wtyczkę.
źródło
Spróbuj edytować swój globalny
composer.json
, uruchamiając:vi ~/.composer/composer.json
następnie upewnij się, że masz na nim ten wiersz:{ "require": { "fxp/composer-asset-plugin": "1.1.*" } }
powyższe odpowiedzi nie zadziałały u mnie ponieważ wersja mojego
fxp/composer-asset-plugin
była jak1.1-beta04
, kiedy ją zmieniłem"1.1.8"
i uruchomiłem polecenie aktualizacji:php /usr/bin/composer global update fxp/composer-asset-plugin --no-plugins
To rozwiązało problem. ale bez edycji mojego globalnego
composer.json
, dawał mi ten błąd:źródło
W moim przypadku projekt na 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, w folderze
vendor/fxp
musisz zamienić foldercomposer-asset-plugin
lub go usunąć.źródło
Jeśli żadne z innych rozwiązań nie zadziałało, wypróbuj AssetPackagist jako alternatywę.
Dodaj pakiety bower-asset / bootstrap i npm-asset / jquery do composer.json w następujący sposób:
"require": { "bower-asset/bootstrap": "^3.3", "npm-asset/jquery": "^2.2" }
Dodaj blok repozytoriów (jeśli nadal go nie masz, jeśli tak, po prostu dołącz do niego) z następującą zawartością:
"repositories": [ { "type": "composer", "url": "https://asset-packagist.org" } ]
Uruchom
composer install
(lubcomposer update
)Biorąc pod uwagę, że asset-packagist instaluje zasoby w innym katalogu, dodaj następujące wiersze do konfiguracji aplikacji (zwykle nazywanej web.php):
$config = [ 'aliases' => [ '@bower' => '@vendor/bower-asset', '@npm' => '@vendor/npm-asset', ], ];
Te instrukcje mogą z czasem ulec zmianie. Zostały skopiowane ze strony repozytorium, aby mogły przetrwać w czasie, na wypadek gdyby coś się stało z witryną. Nie jestem autorem repozytorium, ale naprawdę doceniam włożony w to wysiłek. Odwiedź https://asset-packagist.org/site/about, aby dowiedzieć się więcej o projekcie.
Jeśli zmagasz się z kompozytorem, oto kilka przydatnych poleceń:
composer clear-cache
- Wyczyść pamięci podręczne związane z kompozytoremcomposer install -vvv
- Dodaj parametr „vvv”, aby wyświetlić dane wyjściowe związane z procesem instalacji (przydatne do debugowania)composer global show
- Przydatne do sprawdzenia, czy masz już zainstalowaną wtyczkę fxp / composer-asset-plugin . W moim przypadku już tak było, jednak nie było to wykrywane jako zależność, a rozwiązanie, które opisałem wcześniej, działało dla mnie bezbłędnie - mam nadzieję, że zadziała również u Ciebie!źródło
Możesz wprowadzić stałą poprawkę, wymagając jej na poziomie globalnym, a następnie rozwiązuje się ją dla każdego innego projektu. Ale wtedy upewnij się, że udzielisz wskazówki wszystkim członkom swojego zespołu.
Najlepiej jest dodać to w zakresie projektu i w ten sposób rozwiązuje się to dla wszystkich.
Więc:
composer require fxp/composer-asset-plugin
źródło