为什么作曲家需要这么多内存?

Vla*_*eda 9 composer-php

我最近在安装 symfony2 包时遇到了 Composer 的问题。

我的 VM 上的可用内存是700M,但这还不够。它仅在我停止某些服务并释放1.2G.

Composer 文档对此没有详细说明:

注意: Composer 在内部将 memory_limit 增加到512M. 如果您在使用 Composer 时遇到内存问题,请考虑创建一个问题票,以便我们进行调查。

我的问题是 - composer 在内部做了什么使用这么多内存?

在我看来,这个过程很fairly简单,基本上是检查模块之间的依赖关系,然后下载模块存档,并修改某些文件。我认为用于协商所有模块版本的X稳定性的算法根本不简单,但这是否是其他编程语言的包管理器之间的常见问题,还是 Composer 优化问题?(例如,我还没有听说过 RubyGems 有这样的问题)。

Sel*_*aek 7

大多数其他依赖项管理器没有完整的SAT求解器并且执行“近似值”,这需要更少的比较(因此更少的 CPU、更少的内存)但在某些情况下可能会产生无效的结果或无法解决的事情,像 Bower 这样的包管理器会问你什么想做。Composer 求解器通常会找到解决方案或最终找到冲突。

所以简而言之,这是一个设计选择,但我意识到这也是一个内存使用问题。有一些策略可以降低内存使用率,但它们甚至是耗时的尝试,而且没有多少人有足够的项目知识或时间来实现这一点,因此目前有点停滞不前。