Composerが[ReflectionException]をスローしますクラスFxp \ Composer \ AssetPlugin \ Repository \ NpmRepositoryが存在しません


80

最新バージョン(1.0.0。安定版)のcomposerをインストールし、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.jsonませんか?
Federkun 2016

@Federicoそれはそこにある
マーコ・ミクリック

回答:


182

約9日前(2016年3月末頃)にComposer\Repository\ComposerRepository::whatProvidesAPIが変更されました。(#2668)したがって、fxp/composer-asset-pluginグローバルにインストールした場合は、更新する必要があります。あなたはそれをすることができます:

php composer.phar global update fxp/composer-asset-plugin --no-plugins

4
残念ながら、このコマンドは同じエラーで終了します。~/.composerディレクトリを削除して再インストールすることで解決しましたfxp/composer-asset-plugin
ezze 2016

4
フィードバックをありがとう、私は--no-plugins答えにオプションを追加しました。
Federkun 2016

2
助けにはならなかった。2回目の呼び出しの後、「インストールまたは更新するものがありません」というメッセージが表示されます。その後、更新すると同じエラーが再度作成されます。他にアイデアはありますか?
robsch 2016

1
魅力のように働きます。Thx
MrD

1
それでも私は同じ問題を抱えています
Mohammad Aghayari 2016年

65

アップデートが機能しない場合は、これを試してください。

composer global require fxp/composer-asset-plugin --no-plugins

この固定鉱山。ありがとう!
parpar 2017

22

fxpディレクトリからディレクトリを削除することで問題を解決することになりました.composer。私のセットアップでは、これでうまくいきます。

rm -rf ~/.composer/vendor/fxp

これで、何かが必要になったときに、更新されたプラグインを再ダウンロードできます。


2
Windowsを使用している場合:C:\ Users \ <UserId> \ AppData \ Roaming \ Composer \ vendor
Jesse Q

7

次のコマンドを実行して、グローバルを編集してみてください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-plugin1.0.0-beta3のインストール要求-> fxp / composer-asset-plugin [v1.0.0-beta3]で満たすことができます。--fxp / composer-asset-pluginv1.0.0-beta3にはcomposer-plugin-api1.0.0が必要です->一致するパッケージが見つかりません。

考えられる原因:-パッケージ名のタイプミス-最小安定性設定によると、パッケージは安定した十分なバージョンでは利用できません。https://getcomposer.org/doc/04-schema.md#minimum-stabilityを参照してください。詳細。

さらに一般的な問題については、https://getcomposer.org/doc/articles/troubleshooting.mdをお読みください


2

私の場合、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か削除する必要があります。


1

他の解決策がうまくいかない場合は、代わりにAssetPackagistを試してください。

  1. 次のように、パッケージ bower-asset / bootstrapおよびnpm-asset / jqueryをcomposer.jsonに追加します

    "require": {
        "bower-asset/bootstrap": "^3.3",
        "npm-asset/jquery": "^2.2"
    }
    
  2. 次のコンテンツを含むリポジトリブロックを追加します(まだ持っていない場合は、追加するだけです)。

    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
    
  3. 実行composer install(またはcomposer update

  4. Asset-packagistがアセットを別のディレクトリにインストールすることを考慮して、アプリケーション構成(通常はweb.phpと呼ばれます)に次の行を追加します。

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

これらの手順は、時間の経過とともに変更される場合があります。それらはレポのウェブサイトからコピーされているので、ウェブサイトに何かが起こった場合に備えて時間内に存続することができます。私はリポジトリの作成者ではありませんが、その努力に本当に感謝しています。プロジェクトの詳細については、https://asset-packagist.org/site/aboutを確認してください


Composerで苦労している場合は、ここにいくつかの便利なコマンドがあります。

composer clear-cache -コンポーザー関連のキャッシュをクリアする

composer install -vvv -パラメータ「vvv」を追加して、インストールプロセス関連の出力を表示します(デバッグに役立ちます)

composer global show-fxp / composer-asset-pluginがすでにインストールされているかどうかを確認するのに便利です。私の場合、それはすでに検出されていましたが、依存関係として検出されていませんでした。前述のソリューションは私にとって完璧に機能しました。それがあなたにも機能することを願っています。


-1

グローバルレベルで要求することで永続的な修正を行うことができ、その後、他のすべてのプロジェクトで解決されます。ただし、チームメンバー全員にヒントを与えるようにしてください。

これをプロジェクトスコープに追加するのが最善であり、それはすべての人にそのように解決します。

そう:

composer require fxp/composer-asset-plugin

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.