【问题标题】:Composer installs unexpected polyfills. How to avoid installing them if they are unnecessary?Composer 安装了意外的 polyfill。如果不必要,如何避免安装它们?
【发布时间】:2020-10-01 02:40:57
【问题描述】:

我正在使用作曲家,我刚刚更新了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 对我来说没有意义。

【问题讨论】:

  • "I'm using composer" ...好吧,这就是你的问题 ;-) 一般来说,大多数 polyfill 可以被抛弃,因为它们适用于旧服务器。 Guzzle 是一个我希望 SDK 停止使用的库,它太可怕了……但这都是固执己见,因此为什么不回答。

标签: php symfony composer-php polyfills


【解决方案1】:

安装 polyfills 以防软件包安装在不符合要求的服务器中。这样就实现了最大的可移植性和兼容性。

如果您知道您的项目已经依赖于特定的平台版本和/或扩展,那么避免安装这些包的方法是,您可以确定它们在每次部署时始终可用,就是在replace段:

"replace": {  
        "symfony/polyfill-php72": "*",  
        "symfony/polyfill-mbstring": "*",  
}

这将完全阻止安装这些软件包。但这并不能确保在安装应用程序时这些功能存在。为了完整起见,您应该在 require 部分添加相应的条目:

"require": {  
   "php": "^7.2",  
   "ext-mbstring": "*"
}

这在symfony/polyfill 自述文件中被掩盖了,但它只提到了 PHP 版本的 polyfill,尽管同样的逻辑适用于任何其他 polyfill,你的项目肯定有足够的功能不需要,你可以避免完全安装。

不过,如果您这样做,对性能的影响微乎其微,因此不必担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2015-09-16
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2015-09-26
    相关资源
    最近更新 更多