Composer löst [ReflectionException] aus. Die Klasse Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository ist nicht vorhanden

80

Ich habe die neueste Version (1.0.0. Stable) von Composer installiert und in meinem Yii2-Projekt Folgendes eingegeben:

php composer.phar update

Es gibt mir diesen Fehler:

[ReflectionException] Die Klasse Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository ist nicht vorhanden

[ErrorException] Die Deklaration von Fxp \ Composer \ AssetPlugin \ Repository \ AbstractAssetsRepository :: whatProvides () sollte mit Composer \ Repository \ ComposerRepository :: whatProvides kompatibel sein (Composer \ DependencyResolver \ Pool $ pool, $ name, $ bypassFilters = false)

Kann mir jemand helfen, wie ich das beheben kann?

Hier ist mein 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ć
quelle
1
Kannst du uns deine zeigen composer.json?
Federkun
@ Federico da ist es
Marko Mikulić

Antworten:

182

Vor ungefähr neun Tagen (ungefähr Ende März 2016) hat sich die Composer\Repository\ComposerRepository::whatProvidesAPI geändert. ( # 2668 ) Wenn Sie also fxp/composer-asset-pluginglobal installiert haben , sollten Sie es aktualisieren. Sie können das tun mit:

php composer.phar global update fxp/composer-asset-plugin --no-plugins
Federkun
quelle
4
Leider endet dieser Befehl mit demselben Fehler. Gelöst durch Entfernen des ~/.composerVerzeichnisses und erneutes Installieren fxp/composer-asset-plugin.
Ezze
4
Vielen Dank für das Feedback. Ich habe --no-pluginsder Antwort eine Option hinzugefügt .
Federkun
2
Hat nicht geholfen. Nach einem zweiten Anruf erhalte ich "Nichts zu installieren oder zu aktualisieren". Dann führt das Update wieder zu denselben Fehlern. Irgendwelche weiteren Ideen?
Robsch
1
Arbeiten wie ein Zauber. Thx
MrD
1
Trotzdem habe ich das gleiche Problem
Mohammad Aghayari
65

Versuchen Sie dies, wenn das Update nicht funktioniert.

composer global require fxp/composer-asset-plugin --no-plugins
Javid Ahadov
quelle
diese feste Mine. Vielen Dank!
Parpar
22

Am Ende habe ich das Problem behoben, indem ich das fxpVerzeichnis aus dem .composerVerzeichnis entfernt habe. In meinem Setup macht dies den Trick:

rm -rf ~/.composer/vendor/fxp

Wenn etwas benötigt wird, kann es das aktualisierte Plugin einfach erneut herunterladen.

Alexander O'Mara
quelle
2
Für Benutzer von Windows: C: \ Benutzer \ <Benutzer-ID> \ AppData \ Roaming \ Composer \ Vendor
Jesse Q
7

Versuchen Sie, Ihr globales zu bearbeiten, composer.jsonindem Sie Folgendes ausführen :

vi ~/.composer/composer.json Stellen Sie dann sicher, dass Sie diese Zeile darauf haben:

{
    "require": {
        "fxp/composer-asset-plugin": "1.1.*"
    }
}

Die obigen Antworten haben bei mir nicht funktioniert, da die Version von mir so fxp/composer-asset-pluginwar 1.1-beta04, als ich sie in den "1.1.8"Befehl zum Aktualisieren geändert und ausgeführt habe:

php /usr/bin/composer global update fxp/composer-asset-plugin --no-plugins

Es hat das Problem behoben. aber ohne mein globales zu bearbeiten composer.json, gab es mir diesen Fehler:

Ihre Anforderungen konnten nicht in einen installierbaren Satz von Paketen aufgelöst werden.

Problem 1 - Installationsanforderung für fxp / Composer-Asset-Plugin 1.0.0-Beta3 -> Erfüllbar durch FXP / Composer-Asset-Plugin [v1.0.0-Beta3]. - Für fxp / Composer-Asset-Plugin v1.0.0-Beta3 ist Composer-Plugin-API 1.0.0 erforderlich -> Es wurde kein passendes Paket gefunden.

Mögliche Ursachen: - Ein Tippfehler im Paketnamen - Das Paket ist in einer Version mit ausreichender Stabilität gemäß Ihrer Mindeststabilitätseinstellung nicht verfügbar. Siehe https://getcomposer.org/doc/04-schema.md#minimum-stability für mehr Details.

Weitere häufig auftretende Probleme finden Sie unter https://getcomposer.org/doc/articles/troubleshoot.md .

Mohammad Eghlima
quelle
2

In meinem Fall Projekt auf 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, im Ordner müssen vendor/fxpSie den Ordner ersetzen composer-asset-pluginoder löschen.

Isayevskiy_Sergey
quelle
1

Wenn keine der anderen Lösungen für Sie funktioniert hat, versuchen Sie es alternativ mit AssetPackagist .

  1. Fügen Sie die Pakete bower-asset / bootstrap und npm-asset / jquery wie folgt zu composer.json hinzu:

    "require": {
        "bower-asset/bootstrap": "^3.3",
        "npm-asset/jquery": "^2.2"
    }
    
  2. Fügen Sie einen Repositorys- Block mit dem folgenden Inhalt hinzu (falls Sie noch keinen haben, fügen Sie ihn einfach an):

    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
    
  3. Führen Sie composer install(oder composer update)

  4. Fügen Sie Ihrer Anwendungskonfiguration (normalerweise als web.php bezeichnet) die folgenden Zeilen hinzu, da Asset-Packagist Assets in einem anderen Verzeichnis installiert:

    $config = [
        'aliases' => [
            '@bower' => '@vendor/bower-asset',
            '@npm'   => '@vendor/npm-asset',
        ],
    ];
    

Diese Anweisungen können sich im Laufe der Zeit ändern. Sie wurden von der Repo-Website kopiert, damit sie rechtzeitig verwendet werden können, falls etwas mit der Website passiert. Ich bin nicht der Autor des Repos, aber ich schätze die Anstrengungen, die unternommen wurden, sehr. Weitere Informationen zum Projekt finden Sie unter https://asset-packagist.org/site/about .


Wenn Sie mit Komponisten zu kämpfen haben, haben Sie hier einige nützliche Befehle:

composer clear-cache - Löschen Sie komponentenbezogene Caches

composer install -vvv - Fügen Sie den Parameter "vvv" hinzu, um die Ausgabe des Installationsprozesses anzuzeigen (nützlich zum Debuggen).

composer global show- Nützlich, um zu überprüfen, ob Sie bereits das FXP / Composer-Asset-Plugin installiert haben. In meinem Fall war dies bereits der Fall, wurde jedoch nicht als Abhängigkeit erkannt, und die zuvor beschriebene Lösung hat für mich einwandfrei funktioniert - ich hoffe, sie funktioniert auch für Sie!

Ivo Pereira
quelle
-1

Sie können eine dauerhafte Korrektur vornehmen, indem Sie sie auf globaler Ebene benötigen. Anschließend wird sie für jedes andere Projekt gelöst. Aber dann stellen Sie sicher, dass Sie allen Teammitgliedern den Tipp geben.

Am besten fügen Sie dies im Projektumfang hinzu und es löst sich für alle auf diese Weise.

So:

composer require fxp/composer-asset-plugin

Gabb3
quelle