我正在使用composer,并且我刚刚更新了 guzzlehttp/guzzle
. 我为安装的软件包感到惊讶。
>composer update guzzlehttp/guzzle
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 1 update, 0 removals
- Installing symfony/polyfill-php72 (v1.17.0): Downloading (100%)
- Installing symfony/polyfill-mbstring (v1.17.0): Downloading (100%)
- Installing symfony/polyfill-intl-idn (v1.17.0): Downloading (100%)
- Updating guzzlehttp/guzzle (6.5.2 => 6.5.4): Downloading (100%)
我使用的是php7.4版本的 mbstring
安装,而且没有理由安装这些 polyfills。Composer知道我使用的PHP版本。
>composer show --platform
(...)
ext-mbstring 7.4.2 The mbstring PHP extension
(...)
php 7.4.3 The PHP interpreter
我怀疑是我的某个地方配置错误,我觉得这些polyfills的安装是不合理的。
安装了polyfills 万一 包安装在不符合要求的服务器中。这样可以实现最大的可移植性和兼容性。
如果你知道你的项目已经依赖于特定的平台版本和/或扩展,那么避免这些包被安装的方法是在 replace
部分。
"replace": {
"symfony/polyfill-php72": "*",
"symfony/polyfill-mbstring": "*",
}
这将防止这些包被安装。但这并不能确保在安装应用程序时这些功能是存在的。为了完整起见,你应该在require部分添加相应的条目。
"require": {
"php": "^7.2",
"ext-mbstring": "*"
}
这在 symfonypolyfill readme,但它只提到了PHP版本的polyfills,尽管同样的逻辑也适用于你的项目有足够的功能而不需要的任何其他polyfill,而且你可以完全避免安装。
不过,如果你要安装 不 这样做,对性能的影响微乎其微,不应引起关注。