composer报错的处理方案
composer报错的核心问题有两个。
一、因为composer的版本,依赖于php的版本。
而php的版本又很可能是我们的运行环境决定的。
所以一旦出现版本冲突问题就很奇葩。
比如,运行环境的版本是php5.6,
而composer运行的依赖环境是php8。
这时候就需要安装多个版本的php,运行时,还需要控制不同版本。
二、因为很多依赖会写成大于等于什么版本。
于是当composer update成功执行后。各种最新版本,会导致各种报错。
毕竟绝大部分开发者不会想到php的版本向前根本不兼容,并且还抛弃。
所以,要解决composer报错。就需要针对两个核心问题去处理。
以下是可能的方法。
1、
初次安装
composer install
更新安装
composer updateP
更新依赖路径
composer 里加一个 "" : "./Applications/YourApp/"
"autoload": {
"psr-4": {
"" : "./",
"" : "./Applications/YourApp/"
}
}
然后执行 composer dump-autoload
2、
忽略错误时的安装
composer update --ignore-platform-reqs
3、有时候需要清理缓存后再安装
composer clear-cache
4、在composer中,添加平台约束。
这样才能确保更新的文件,不超过运行环境的版本。
不然会自动安装成最新版本。而php的各版本之间,根本不兼容。所以会出各种问题。
{
"config": {
"platform": {
"php": "7.4.33"
}
}
}
5、更新composer版本以配合运行环境。
sudo composer self-update 2.2.2
6、composer回到对应的状态
sudo composer self-update --rollback
7、
当更新报错时,可能因为php缺少扩展。需要安装xml、dom、zip扩展。
例如:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Root composer.json requires wander/wepay ^1.0 -> satisfiable by wander/wepay[v1.0.4].
- wander/wepay v1.0.4 requires ext-xml * -> it is missing from your system. Install or enable PHP's xml extension.
Problem 2
- Root composer.json requires wechatpay/wechatpay ^1.4 -> satisfiable by wechatpay/wechatpay[1.4.0, ..., 1.4.12].
- wechatpay/wechatpay[1.4.0, ..., 1.4.12] require ext-simplexml * -> it is missing from your system. Install or enable PHP's simplexml extension.
Problem 3
- qcloud/cos-sdk-v5[v2.6.0, ..., v2.6.16] require ext-simplexml * -> it is missing from your system. Install or enable PHP's simplexml extension.
- Root composer.json requires qcloud/cos-sdk-v5 ^2.6 -> satisfiable by qcloud/cos-sdk-v5[v2.6.0, ..., v2.6.16].
To enable extensions, verify that they are enabled in your .ini files:
- /etc/php/7.4/cli/php.ini
8、但直接安装,可能由于ubuntu20.04版本问题,没有对应的包,所以需要先更新一下可安装的包。
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
再进行安装。
sudo apt-get install php7.4
sudo apt-get install php7.4-xml php7.4-dom php7.4-simplexml php7.4-zip
最后,在重复从一开始的步骤。