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