J'ai installé la dernière version (1.0.0. Stable) de composer) et dans mon projet Yii2, j'ai tapé ceci:
php composer.phar update
Cela me donne cette erreur:
[ReflectionException] La classe Fxp\Composer\AssetPlugin\Repository\NpmRepository n'existe pas
[ErrorException] La déclaration de Fxp\Composer\AssetPlugin\Repository\AbstractAssetsRepository :: whatProvides () doit être compatible avec Composer\Repository\ComposerRepository :: whatProvides (Composer\DependencyResolver\Pool $ pool, $ name, $ bypassFilters = false).
Quelqu'un peut-il m'aider à résoudre ce problème?
Voici mon compositeur.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"
}
}
}
Il y a environ neuf jours (vers la fin du mois de mars 2016), Composer\Repository\ComposerRepository::whatProvides
api changé. ( # 2668 ) Donc, si vous avez installé fxp/composer-asset-plugin
globalement, vous devriez le mettre à jour. Vous pouvez le faire avec:
php composer.phar global update fxp/composer-asset-plugin --no-plugins
Essayez celui-ci si la mise à jour ne fonctionne pas.
composer global require fxp/composer-asset-plugin --no-plugins
J'ai fini par résoudre le problème en supprimant le répertoire fxp
du répertoire .composer
répertoire. Sur ma configuration, ceci fait le tour:
rm -rf ~/.composer/vendor/fxp
Maintenant, quand quelque chose en a besoin, il peut simplement télécharger à nouveau le plugin mis à jour.
Essayez de modifier votre global composer.json
en exécutant:
vi ~/.composer/composer.json
puis assurez-vous que vous avez cette ligne dessus:
{
"require": {
"fxp/composer-asset-plugin": "1.1.*"
}
}
les réponses ci-dessus n'ont pas fonctionné pour moi car la version de mon fxp/composer-asset-plugin
était comme 1.1-beta04
, quand je l'ai changé en "1.1.8"
et exécutez la commande de mise à jour:
php /usr/bin/composer global update fxp/composer-asset-plugin --no-plugins
Cela a résolu le problème. mais sans éditer mon global composer.json
, ça me donnait cette erreur:
Vos besoins n'ont pas pu être résolus en un ensemble de packages installables.
Problème 1 - Demande d'installation pour fxp/composer-asset-plugin 1.0.0-beta3 -> satisfiable par fxp/composer-asset-plugin [v1.0.0-beta3]. - fxp/composer-asset-plug-in v1.0.0-beta3 requiert composer-plugin-api 1.0.0 -> aucun package correspondant trouvé.
Causes potentielles: - Une typo dans le nom du package - Le package n'est pas disponible dans une version suffisamment stable en fonction de votre paramètre de stabilité minimale, voir https://getcomposer.org/doc/04-schema.md# stabilité minimale pour plus de détails.
Lisez https://getcomposer.org/doc/articles/troubleshooting.md pour connaître les autres problèmes courants.
Dans mon cas, projet sur 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, dans le dossier vendor/fxp
vous devez remplacer le dossier composer-asset-plugin
ou supprimez-le.
Si aucune autre solution ne fonctionne pour vous, essayez plutôt AssetPackagist .
Ajoutez les packages bower-asset/bootstrap et npm-asset/jquery à composer.json comme suit:
"require": {
"bower-asset/bootstrap": "^3.3",
"npm-asset/jquery": "^2.2"
}
Ajoutez un bloc référentiels (si vous n'en avez toujours pas, ajoutez-le simplement) avec le contenu suivant:
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
Courir composer install
(ou composer update
)
Considérant que asset-packagist installe les actifs dans un répertoire différent, ajoutez les lignes suivantes à la configuration de votre application (généralement appelée web.php):
$config = [
'aliases' => [
'@bower' => '@vendor/bower-asset',
'@npm' => '@vendor/npm-asset',
],
];
Ces instructions peuvent changer avec le temps. Ils ont été copiés à partir du site Web du dépôt pour pouvoir être conservés à temps, au cas où quelque chose se produirait. Je ne suis pas l'auteur du rapport, mais j'apprécie vraiment l'effort consenti. Veuillez vérifier https://asset-packagist.org/site/about pour en savoir plus sur le projet.
Si vous vous battez avec composer, voici quelques commandes utiles:
composer clear-cache
- Effacer composer caches associés
composer install -vvv
- Ajoutez le paramètre "vvv" pour afficher la sortie liée au processus d'installation (utile pour le débogage)
composer global show
- Utile pour vérifier si vous avez déjà installé fxp/composer-asset-plugin . Dans mon cas, c’était déjà le cas, mais cela n’a pas été détecté comme une dépendance et la solution que j’ai décrite précédemment a fonctionné sans faille pour moi - espérons que cela fonctionne aussi pour vous!