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"
}
}
}
php
yii2
composer-php
Marko Mikulić
fuente
fuente
composer.json
?Respuestas:
Hace unos nueve días (a finales de marzo de 2016), la
Composer\Repository\ComposerRepository::whatProvides
API cambió. ( # 2668 ) Entonces, si lo ha instaladofxp/composer-asset-plugin
globalmente, debería actualizarlo. Puedes hacer eso con:php composer.phar global update fxp/composer-asset-plugin --no-plugins
fuente
~/.composer
directorio y reinstalandofxp/composer-asset-plugin
.--no-plugins
opción a la respuesta.Pruebe este si la actualización no funciona.
composer global require fxp/composer-asset-plugin --no-plugins
fuente
Terminé resolviendo el problema eliminando el
fxp
directorio del.composer
directorio. En mi configuración, esto hace el truco:Ahora, cuando algo lo necesite, puede volver a descargar el complemento actualizado.
fuente
Intente editar su global
composer.json
ejecutando: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-plugin
era como1.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:fuente
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/fxp
debe reemplazar la carpetacomposer-asset-plugin
o eliminarla.fuente
Si ninguna de las otras soluciones le ha funcionado, pruebe AssetPackagist como alternativa.
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" }
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" } ]
Ejecutar
composer install
(ocomposer update
)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 compositorcomposer 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!fuente
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
fuente