我们开始在新项目中使用 PHP 8。但我们也在将旧项目迁移到新的 PHP 8。安装依赖项时出现问题。
由于 PHP 8 相对较新,仍然有很多第三方包依赖旧版本的 PHP(主要是因为配置过时)。
我的 PHP 版本:
martin@empire:~$ php -v
PHP 8.0.3 (cli) (built: Mar 5 2021 07:54:13) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.3, Copyright (c) Zend Technologies
with Zend OPcache v8.0.3, Copyright (c), by Zend Technologies
Symfony 项目中的 composer install
示例:
martin@empire:~/projects/twig-example$ composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Your lock file does not contain a compatible set of packages. Please run composer update.
Problem 1
- twig/twig is locked to version v2.3.0 and an update of this package was not requested.
- twig/twig v2.3.0 requires php ^7.0 -> your php version (8.0.3) does not satisfy that requirement.
Problem 2
- twig/twig v2.3.0 requires php ^7.0 -> your php version (8.0.3) does not satisfy that requirement.
...
Laravel 8 项目中的示例 composer update
:
martin@empire:~/projects/collabquest-api$ composer update
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- jwilsson/spotify-web-api-php[3.6.0, ..., 3.6.2] require php ^7.0 -> your php version (8.0.3) does not satisfy that requirement.
- Root composer.json requires jwilsson/spotify-web-api-php ^3.6 -> satisfiable by jwilsson/spotify-web-api-php[3.6.0, 3.6.1, 3.6.2].
处理这个问题和解决这个依赖问题的最佳方法是什么?
答案 0 :(得分:0)
降级您的 php 版本,直到依赖它的软件包进行更新, 或你必须用另一个替换它, 我有同样的问题,我使用了第一个解决方案。
答案 1 :(得分:-2)
更新:
使用支持 PHP 8 的较新软件包。大多数软件包都是最新的。
如果某些明确要求较低版本的 PHP,请寻找替代品。或者分叉它们并更新。
您可以使用以下作为临时解决方案:
Composer 有以下几种可能性:
--ignore-platform-req=IGNORE-PLATFORM-REQ Ignore a specific platform requirement (php & ext- packages). (multiple values allowed)
--ignore-platform-reqs Ignore all platform requirements (php & ext- packages).
用法:
# for composer install
composer --ignore-platform-req=php install
# for composer update
composer --ignore-platform-req=php update
# also works for require etc.
大多数软件包使用 PHP 7.x.x 或更低版本,向后兼容版本 8。所以应该不会出现问题。
更新:也有可能直接在 composer.json
中强制版本。但是,这个选项对我们来说是不可用的,因为我们已经在代码中使用了 php 版本 8 的特殊语法和特性。即便如此,我们也已经出现了版本冲突,无论是将 PHP 7 版还是 8 版强制到项目中。
composer.json
中的强制版本示例:
{
"config": {
"platform": {
"php": "7.0.0"
}
}
}
只有在您确定它不会引起任何问题时才使用它。