Composer zgłasza [ReflectionException] Klasa Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository nie istnieje

80

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"
        }
    }
}
Marko Mikulić
źródło
1
czy możesz nam pokazać swoje composer.json?
Federkun
@Federico tam jest
Marko Mikulić

Odpowiedzi:

182

Około dziewięć dni temu (pod koniec marca 2016 r.) Composer\Repository\ComposerRepository::whatProvidesInterfejs API się zmienił. ( # 2668 ) Jeśli więc zainstalowałeś go fxp/composer-asset-pluginglobalnie, powinieneś go zaktualizować. Możesz to zrobić za pomocą:

php composer.phar global update fxp/composer-asset-plugin --no-plugins
Federkun
źródło
4
Niestety, to polecenie kończy się tym samym błędem. Rozwiązany przez usunięcie ~/.composerkatalogu i ponowną instalację fxp/composer-asset-plugin.
ezze
4
dzięki za informację zwrotną, dodałem --no-pluginsopcję do odpowiedzi.
Federkun
2
Nie pomogło. Po drugim połączeniu otrzymuję komunikat „Nie ma nic do zainstalowania ani aktualizacji”. Następnie aktualizacja spowoduje te same błędy. Jakieś dalsze pomysły?
robsch
1
Działa jak urok. Thx
MrD
1
Nadal mam ten sam problem
Mohammad Aghayari
65

Spróbuj tego, jeśli aktualizacja nie działa.

composer global require fxp/composer-asset-plugin --no-plugins
Javid Ahadov
źródło
to naprawiło moje. Dzięki!
parpar
22

Ostatecznie rozwiązałem problem, usuwając fxpkatalog z .composerkatalogu. W mojej konfiguracji to załatwia sprawę:

rm -rf ~/.composer/vendor/fxp

Teraz, gdy coś tego potrzebuje, może po prostu ponownie pobrać zaktualizowaną wtyczkę.

Alexander O'Mara
źródło
2
Dla osób korzystających z systemu Windows: C: \ Users \ <UserId> \ AppData \ Roaming \ Composer \ vendor
Jesse Q,
7

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-pluginbyła jak 1.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:

Nie można rozwiązać Twoich wymagań w postaci zestawu pakietów do zainstalowania.

Problem 1 - Żądanie instalacji fxp / composer-asset-plugin 1.0.0-beta3 -> możliwe do spełnienia przez fxp / composer-asset-plugin [v1.0.0-beta3]. - fxp / composer-asset-plugin v1.0.0-beta3 wymaga composer-plugin-api 1.0.0 -> nie znaleziono pasującego pakietu.

Potencjalne przyczyny: - literówkę w nazwie pakietu - Pakiet nie jest dostępny w wersji stabilnej, wystarczy zgodnie z ustawieniem minimalnej trwałości patrz https://getcomposer.org/doc/04-schema.md#minimum-stability dla więcej szczegółów.

Przeczytaj https://getcomposer.org/doc/articles/troubleshooting.md, aby poznać inne typowe problemy.

Mohammad Eghlima
źródło
2

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/fxpmusisz zamienić folder composer-asset-pluginlub go usunąć.

Isayevskiy_Sergey
źródło
1

Jeśli żadne z innych rozwiązań nie zadziałało, wypróbuj AssetPackagist jako alternatywę.

  1. 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"
    }
    
  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"
        }
    ]
    
  3. Uruchom composer install(lub composer update)

  4. 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 kompozytorem

composer 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!

Ivo Pereira
źródło
-1

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

Gabb3
źródło