我安装了 composer 的最新版本(1.0.0. stable),在我的 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"
}
}
}
composer.json
吗?
大约 9 天前(2016 年 3 月左右),Composer\Repository\ComposerRepository::whatProvides
api 发生了变化。 (#2668) 因此,如果您已全局安装 fxp/composer-asset-plugin
,则应更新它。你可以这样做:
php composer.phar global update fxp/composer-asset-plugin --no-plugins
如果更新不起作用,请尝试这个。
composer global require fxp/composer-asset-plugin --no-plugins
我最终通过从 .composer
目录中删除 fxp
目录解决了这个问题。在我的设置中,这可以解决问题:
rm -rf ~/.composer/vendor/fxp
现在,当有什么需要时,它可以重新下载更新的插件。
尝试通过运行来编辑您的全局 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 for更多细节。阅读 https://getcomposer.org/doc/articles/troubleshooting.md 了解更多常见问题。
在我的 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
或将其删除。
如果其他解决方案都不适合您,请尝试使用 AssetPackagist 作为替代方案。
将包 bower-asset/bootstrap 和 npm-asset/jquery 添加到 composer.json,如下所示: "require": { "bower-asset/bootstrap": "^3.3", "npm-asset/jquery": "^ 2.2" } 添加一个 repositories 块(如果你还没有,如果你有,就追加到它上面),内容如下: "repositories": [ { "type": "composer", "url": " https://asset-packagist.org" } ] 运行 composer install (or composer update)配置 = [ '别名' => [ '@bower' => '@vendor/bower-asset', '@npm' => '@vendor/npm-asset', ], ];
这些说明可能会随着时间而改变。它们是从 repo 网站复制的,因此它们可以及时保存,以防网站出现问题。我不是回购协议的作者,但我非常感谢为此付出的努力。请查看 https://asset-packagist.org/site/about 以了解有关该项目的更多信息。
如果您正在为 composer 苦苦挣扎,这里有一些有用的命令:
composer clear-cache
- 清除作曲家相关的缓存
composer install -vvv
- 添加参数“vvv”以显示安装过程相关的输出(对调试有用)
composer global show
- 检查您是否已经安装了 fxp/composer-asset-plugin。在我的情况下,它已经是,但是它没有被检测为依赖项,并且我之前描述的解决方案对我来说完美无缺 - 希望它也对你有用!
您可以通过在全局级别上要求它来进行永久修复,然后为每个其他项目解决它。但是,请确保将小费提供给所有团队成员。
最好的办法是在项目范围内添加它,这样就可以解决每个人的问题。
所以:
composer require fxp/composer-asset-plugin
不定期副业成功案例分享
~/.composer
目录并重新安装fxp/composer-asset-plugin
解决。--no-plugins
选项。