Composer lanza [ReflectionException] Class Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository no existe

80

Instalé la última versión (1.0.0. Estable) de composer y en mi proyecto Yii2 escribí esto:

php composer.phar update

Me da este error:

[ReflectionException] La clase Fxp \ Composer \ AssetPlugin \ Repository \ NpmRepository no existe

[ErrorException] Declaración de Fxp \ Composer \ AssetPlugin \ Repository \ AbstractAssetsRepository :: whatProvides () debería ser compatible con Composer \ Repository \ ComposerRepository :: whatProvides (Composer \ DependencyResolver \ Pool $ pool, $ name, $ bypassFilters = false)

¿Alguien puede ayudarme a solucionar este problema?

Aquí está mi 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ć
fuente
1
nos puedes mostrar tu composer.json?
Federkun
@Federico ahí está
Marko Mikulić

Respuestas:

182

Hace unos nueve días (a finales de marzo de 2016), la Composer\Repository\ComposerRepository::whatProvidesAPI cambió. ( # 2668 ) Entonces, si lo ha instalado fxp/composer-asset-pluginglobalmente, debería actualizarlo. Puedes hacer eso con:

php composer.phar global update fxp/composer-asset-plugin --no-plugins
Federkun
fuente
4
Desafortunadamente, este comando termina con el mismo error. Resuelto eliminando el ~/.composerdirectorio y reinstalando fxp/composer-asset-plugin.
ezze
4
gracias por los comentarios, agregué una --no-pluginsopción a la respuesta.
Federkun
2
No ayudó. Después de una segunda llamada, obtengo "No hay nada que instalar o actualizar". Luego, la actualización volverá a crear los mismos errores. ¿Alguna otra idea?
robsch
1
Trabajando como un encanto. Thx
MrD
1
Todavía tengo el mismo problema
Mohammad Aghayari
65

Pruebe este si la actualización no funciona.

composer global require fxp/composer-asset-plugin --no-plugins
Javid Ahadov
fuente
esta mía fija. ¡Gracias!
parpar
22

Terminé resolviendo el problema eliminando el fxpdirectorio del .composerdirectorio. En mi configuración, esto hace el truco:

rm -rf ~/.composer/vendor/fxp

Ahora, cuando algo lo necesite, puede volver a descargar el complemento actualizado.

Alexander O'Mara
fuente
2
Para aquellos que usan Windows: C: \ Users \ <UserId> \ AppData \ Roaming \ Composer \ vendor
Jesse Q
7

Intente editar su global composer.jsonejecutando:

vi ~/.composer/composer.json luego asegúrese de tener esta línea en él:

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

las respuestas anteriores no funcionaron para mí porque la versión de mi fxp/composer-asset-pluginera como 1.1-beta04, cuando la cambié "1.1.8"y ejecuté el comando de actualización:

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

Solucionó el problema. pero sin editar mi global composer.json, me estaba dando este error:

Sus requisitos no se pudieron resolver en un conjunto de paquetes instalables.

Problema 1: solicitud de instalación para fxp / composer-asset-plugin 1.0.0-beta3 -> satisfactorio por fxp / composer-asset-plugin [v1.0.0-beta3]. - fxp / composer-asset-plugin v1.0.0-beta3 requiere composer-plugin-api 1.0.0 -> no se encontró ningún paquete coincidente.

Causas potenciales: - Un error tipográfico en el nombre del paquete - El paquete no está disponible en una versión lo suficientemente estable de acuerdo con su configuración de estabilidad mínima, consulte https://getcomposer.org/doc/04-schema.md#minimum-stability para más detalles.

Lea https://getcomposer.org/doc/articles/troubleshooting.md para conocer más problemas comunes.

Mohammad Eghlima
fuente
2

En mi caso, proyecto en 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, en la carpeta vendor/fxpdebe reemplazar la carpeta composer-asset-plugino eliminarla.

Isayevskiy_Sergey
fuente
1

Si ninguna de las otras soluciones le ha funcionado, pruebe AssetPackagist como alternativa.

  1. Agregue los paquetes bower-asset / bootstrap y npm-asset / jquery a composer.json de la siguiente manera:

    "require": {
        "bower-asset/bootstrap": "^3.3",
        "npm-asset/jquery": "^2.2"
    }
    
  2. Agregue un bloque de repositorios (si aún no tiene uno, si lo tiene, simplemente añádalo) con el siguiente contenido:

    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
    
  3. Ejecutar composer install(o composer update)

  4. Teniendo en cuenta que asset-packagist instala activos en un directorio diferente, agregue las siguientes líneas a la configuración de su aplicación (generalmente llamada web.php):

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

Estas instrucciones pueden cambiar con el tiempo. Se han copiado del sitio web del repositorio para que puedan durar en el tiempo en caso de que algo le suceda al sitio web. No soy el autor del repositorio, pero realmente agradezco el esfuerzo realizado. Consulte https://asset-packagist.org/site/about para saber más sobre el proyecto.


Si tiene problemas con el compositor, aquí tiene algunos comandos útiles:

composer clear-cache - Borrar cachés relacionados con el compositor

composer install -vvv - Agregue el parámetro "vvv" para mostrar la salida relacionada con el proceso de instalación (útil para depurar)

composer global show- Útil para comprobar si ya tiene instalado fxp / composer-asset-plugin . En mi caso, ya lo estaba, sin embargo, no se estaba detectando como una dependencia, y la solución que describí anteriormente funcionó a la perfección para mí, ¡espero que también funcione para usted!

Ivo Pereira
fuente
-1

Puede hacer una solución permanente solicitándola a nivel global y luego se resuelve para todos los demás proyectos. Pero luego asegúrese de dar la propina a todos los miembros de su equipo.

Lo mejor es agregar esto al alcance del proyecto y se resuelve para todos de esa manera.

Entonces:

composer require fxp/composer-asset-plugin

Gabb3
fuente