Composer кидає [ReflectionException] Клас Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository не існує


80

Я встановив останню версію (1.0.0. Стабільна) композитора і у своєму проекті 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?
Федеркун,

@Federico ось це
Marko Mikulić

Відповіді:


182

Близько дев'яти днів тому (приблизно в кінці березня 2016 р.) 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

4
дякую за відгук, я додав --no-pluginsопцію до відповіді.
Федеркун,

2
Не допомогло. Після другого дзвінка я отримую повідомлення "Нічого встановлювати або оновлювати". Потім оновлення знову створить ті самі помилки. Будь-які подальші ідеї?
Робш

1
Працює як оберіг. Thx
MrD

1
Все-таки у мене та сама проблема
Мохаммад Агаярі

65

Спробуйте це, якщо оновлення не працює.

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

це виправлена ​​шахта. Дякую!
parpar

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-activ-plugin 1.0.0-beta3 -> задовольняється fxp / composer-activ-plugin [v1.0.0-beta3]. - fxp / composer-activ-plugin v1.0.0-beta3 вимагає composer-plugin-api 1.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-activ / bootstrap та npm-activ / 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. Враховуючи, що package-Packagist встановлює активи в іншому каталозі, додайте наступні рядки до конфігурації програми (зазвичай її називають web.php):

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

Ці інструкції можуть змінюватися з часом. Вони скопійовані з веб-сайту репо, щоб вони могли тривати вчасно, на всякий випадок, якщо з веб-сайтом щось трапиться. Я не автор репо, але я дуже ціную докладені зусилля. Будь ласка, перевірте https://asset-packagist.org/site/about, щоб дізнатись більше про проект.


Якщо ви боретеся з композитором, тут у вас є кілька корисних команд:

composer clear-cache - Очистити кеші, пов’язані з композитором

composer install -vvv - Додайте параметр "vvv", щоб показати вихідні дані, пов'язані з процесом встановлення (корисно для налагодження)

composer global show- Корисно перевірити, чи вже встановлено fxp / composer-activ-plugin . У моєму випадку це вже було, проте це не було виявлено як залежність, і рішення, яке я описав раніше, працювало для мене бездоганно - сподіваюся, воно спрацює і для вас!


-1

Ви можете зробити постійне виправлення, вимагаючи його на глобальному рівні, а потім це вирішується для кожного іншого проекту. Але тоді обов’язково дайте підказку всім членам вашої команди.

Найкраще це додати в обсязі проекту, і це вирішує всіх таким чином.

Так:

composer require fxp/composer-asset-plugin

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.