web-dev-qa-db-ja.com

Composer throws [ReflectionException] Class Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepositoryは存在しません

composerの最新バージョン(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)と互換性があります

誰かがこれを修正する方法を手伝ってくれますか?

これが私の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"
        }
    }
}
79
Marko Mikulić

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

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

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

composer global require fxp/composer-asset-plugin --no-plugins
59
Javid Ahadov

.composerディレクトリからfxpディレクトリを削除することで、問題を解決しました。私の設定では、これはトリックを行います:

rm -rf ~/.composer/vendor/fxp

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

22

次を実行して、グローバル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-plugin 1.0.0-beta3のインストール要求-> fxp/composer-asset-plugin [v1.0.0-beta3]で満足できる。 -fxp/composer-asset-plugin v1.0.0-beta3にはcomposer-plugin-api 1.0.0が必要です->一致するパッケージが見つかりません。

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

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

6

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

2

他に解決策がない場合は、代替手段として AssetPackagist を試してください。

  1. packagesbower-asset/bootstrapおよびnpm-asset /を追加します次のようなcomposer.jsonへのjquery

    "require": {
        "bower-asset/bootstrap": "^3.3",
        "npm-asset/jquery": "^2.2"
    }
    
  2. 次の内容のrepositoriesブロックを追加します(まだない場合は追加します)。

    "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',
        ],
    ];
    

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


作曲家と格闘している場合、ここにいくつかの便利なコマンドがあります:

composer clear-cache-composer関連キャッシュをクリア

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

composer global show-fxp/composer-asset-pluginが既にインストールされているかどうかを確認するのに役立ちます。私の場合、すでに依存関係として検出されていませんでしたが、先ほど説明した解決策は問題なく機能していました。

1
Ivo Pereira