我安装了最新版本(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"
}
}
}
答案 0 :(得分:178)
大约九天前(2016年3月底左右),Composer\Repository\ComposerRepository::whatProvides
api发生了变化。 (#2668)
因此,如果您已全局安装fxp/composer-asset-plugin
,则应更新它。你可以用:
php composer.phar global update fxp/composer-asset-plugin --no-plugins
答案 1 :(得分:58)
如果更新无效,请尝试此操作。
composer global require fxp/composer-asset-plugin --no-plugins
答案 2 :(得分:22)
我最终通过从fxp
目录中删除.composer
目录来解决此问题。在我的设置上,这就是诀窍:
rm -rf ~/.composer/vendor/fxp
现在当需要它时,它可以重新下载更新的插件。
答案 3 :(得分:6)
尝试通过运行:
来修改全局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#minimum-stability。
阅读https://getcomposer.org/doc/articles/troubleshooting.md了解更多常见问题。
答案 4 :(得分: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
或将其删除。
答案 5 :(得分:1)
如果其他解决方案都不适合您,请尝试AssetPackagist作为替代方案。
将软件包 bower-asset / bootstrap 和 npm-asset / jquery 添加到composer.json,如下所示:< / p>
"require": {
"bower-asset/bootstrap": "^3.3",
"npm-asset/jquery": "^2.2"
}
使用以下内容添加存储库块(如果您仍然没有,只需添加一个):
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
运行composer install
(或composer update
)
考虑到 asset-packagist 在不同目录中安装资产,请将以下行添加到应用程序配置中(通常称为web.php):
$config = [
'aliases' => [
'@bower' => '@vendor/bower-asset',
'@npm' => '@vendor/npm-asset',
],
];
这些说明可能会随时间而变化。它们已经从repo网站复制,因此它们可以及时使用,以防万一网站出现问题。我不是回购的作者,但我真的很感激所做的努力。请查看https://asset-packagist.org/site/about以了解有关该项目的更多信息。
如果你正在努力学习作曲家,这里有一些有用的命令:
composer clear-cache
- 清除与作曲家相关的缓存
composer install -vvv
- 添加参数&#34; vvv&#34;显示与安装过程相关的输出(对调试很有用)
composer global show
- 有助于检查您是否已安装 fxp / composer-asset-plugin 。在我的情况下,它已经是,但它没有被检测为依赖,并且我之前描述的解决方案对我来说完美无瑕 - 希望它也适合你!
答案 6 :(得分:-1)
您可以通过在全局级别要求它来进行永久性修复,然后针对每个其他项目解决它。但请确保将提示提供给所有团队成员。
最好是在项目范围内添加它,并以这种方式解决所有人。
所以:
composer require fxp/composer-asset-plugin