我正在使用作曲家,我刚刚更新了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%)
我正在使用安装了mbstring
的 php 7.4,没有理由安装这些 polyfill。作曲家知道我正在使用的PHP版本:
>composer show --platform
(...)
ext-mbstring 7.4.2 The mbstring PHP extension
(...)
php 7.4.3 The PHP interpreter
我怀疑我在某处有一些配置错误,安装这些 polyfill 对我来说没有意义。
如果包安装在不符合要求的服务器中,则会安装 polyfill。通过这种方式,可以实现最大的便携性和兼容性。
如果您知道您的项目已经依赖于特定的平台版本和/或扩展,因此您可以确定它们始终在每个部署中都可用,那么避免安装这些包的方法是在replace
部分声明它们:
"replace": {
"symfony/polyfill-php72": "*",
"symfony/polyfill-mbstring": "*"
}
这将完全阻止安装这些软件包。但这并不能确保在安装应用程序时存在这些功能。为了完整起见,您应该在 require 部分添加相应的条目:
"require": {
"php": "^7.2",
"ext-mbstring": "*"
}
这在symfony/polyfill自述文件中被掩盖了,但它只提到了PHP版本的polyfills,尽管同样的逻辑适用于任何其他polyfill,你的项目肯定有足够的功能,不需要,你可以避免完全安装。
不过,如果您不这样做,性能影响很小,不应引起关注。