75

为什么我的作曲家依赖项更新最多需要两分钟,即使没有更改?

一个流行的建议是附加--prefer-dist标志:

php composer.phar update --prefer-dist

但这对我来说没有什么区别。下面是我的 composer.json 文件——我是否遗漏了一些明显的东西?

{
    "name": "my-namespace/symfony",
    "type": "project",
    "description": "",
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "2.3.*",
        "doctrine/orm": ">=2.2.3,<2.4-dev",
        "doctrine/doctrine-bundle": "1.2.*",
        "twig/extensions": "1.0.*",
        "symfony/assetic-bundle": "2.3.*",
        "symfony/monolog-bundle": "2.3.*",
        "sensio/framework-extra-bundle": "2.3.*",
        "sensio/generator-bundle": "2.3.*",
        "sensio/distribution-bundle": "2.2.*",
        "my-namespace/my-bundle": "1.0.*"
    },
   "repositories": [
        {
            "type": "vcs",
            "url": "http://username:password@git.com/my-bundle.git"
        }
    ],    
    "scripts": {
        "post-install-cmd": [
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ],
        "post-update-cmd": [
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ]
    },
    "config": {
        "bin-dir": "bin"
    },
    "minimum-stability": "dev",
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "branch-alias": {
            "dev-master": "2.3-dev"
        }
    }
}
4

10 回答 10

120

此问题通常与在 CLI 环境中加载的 xdebug 有关。(是否启用 xdebug 无关紧要。)

您可以使用以下命令之一检查是否启用了 xdebug。

// Unix
php -m | grep xdebug
// Windows
php -m | findstr xdebug

Further information on what operations take so long can be gained by enabling maximum verbosity and profiling information. (Replace install with update if you are updating the packages.)

composer install --prefer-dist -vvv --profile
于 2013-10-11T11:17:35.110 回答
31

可能减慢 Composer 的因素:

  • 正如所指出的,xdebug会影响 Composer 的性能。跑步composer diagnose也会就此发出警告。

  • 运行update而不是install. 人们常常只是update不停地奔跑。这使得 Composer 经历了整个依赖关系解析过程,无论是否有任何改变。当你运行时install,Composer 直接从你的 .lock 文件中获取需求,跳过依赖解析过程。您应该只update在应用程序的开发生命周期中运行。即使那样,这也不是您通常必须每天运行的东西。

  • 如果您有自己经常更新的特定依赖项,则可以尝试通过运行composer update vendor/package --with-dependencies来简化流程。

  • 设置minimum-stabilitydev。这极大地扩展了依赖解析器必须考虑的可能性。除非您绝对别无选择,否则您几乎不应该降低minimum-stabilityto 。dev寻找替代方案,例如暂时使用内联@dev标志。

于 2015-09-18T10:10:26.953 回答
5

似乎问题已解决,但这可能会对某人有所帮助。

每当我运行 composer install 或 update 时,获取https://packagist.org/packages.json文件需要 10 多秒。最终我发现问题与 IPv6 有关,因为从 IPv4 站点获取文件不到一秒钟。
问题是我的 ISP 不支持 IPv6,但我在以太网属性中启用了它。在我取消Internet Protocol Version 6 (TCP/IPv6)网络设置后,安装/更新速度大大提高(从 200 多秒下降到 10 秒)

于 2016-01-04T15:54:34.303 回答
3

您正在使用私有存储库。这将不允许下载您包含的版本的压缩版本,但必须克隆存储库。此外,可能必须扫描整个存储库以找到所需的版本。

您应该检查是否可以选择使用 Satis。这样,您可以准备自己软件的 ZIP 并下载它,就像托管在 Github 上的东西一样(它有一个 API 供 Composer 用于允许下载 ZIP,即使它们没有明确准备)。

于 2013-10-11T17:53:12.233 回答
3

我在内存不足的 VM 上运行 Symfony2 时遇到了这个问题。我增加了机器的内存,它大大改善了。您可以检查系统上的内存,看看是否可以升级。

于 2014-02-01T01:21:20.263 回答
2

我有同样的问题composer update,我将作曲家本身更新到最新版本composer selfupdate,现在它的速度可以接受。

于 2018-03-14T18:06:32.617 回答
0

事实上,xdebug 肯定会减慢速度。虽然卸载 xdebug 并不理想。一个不错的选择是使用 HHVM 并将其用于作曲家。

安装 HHVM 相当轻松,而且 HHVM 本身比 PHP5 快得多。这是双赢的——YMMV,但即使 xdebug 不在图片中,我也会在作曲家使用中获得近 5 倍的速度提升(诚然,在眼球测功机上)。

如果您使用的是 OS X,那么此链接可能会有所帮助(我写的关于此事的博客文章):

http://circlical.com/blog/2015/11/11/slow-composer-on-os-x

于 2015-11-11T18:32:15.907 回答
0

我的解决方案 WINDOWS 10 x 64 位 WAMP 用户使用 Laravel,经过数周缓慢的作曲家更新和作曲家需要

你需要一个叫做 cacert.pem 的东西

https://curl.haxx.se/docs/caextract.html

然后将该文件粘贴到您的 wamp 主目录 C:\wamp64\cacert.pem

然后在搜索选项卡中搜索 php.ini 在 sublime 或任何文本编辑器上打开所有具有该名称的文件

找到名为 curl.cainfo 和 openssl.cafile 的行

将您的路径放入此文件 - 请参阅我的案例中的示例:

curl.cainfo="C:\wamp64\cacert.pem"

openssl.cafile="C:\wamp64\cacert.pem"

对您之前搜索的所有 php.ini 文件执行此操作,在所有文件中!

OKAY RESTART SERVER 对我有用,希望对你有用,我希望以前有人发表此评论!所以我不会花 2 周时间修复它

也叫

composer config --global repo.packagist composer https://packagist.org

这使得 https 上的连接也运行这个

composer install --prefer-dist -vvv --profile
于 2020-07-18T20:26:05.443 回答
0

由于启用了 IPv6,我遇到了问题。运行以下解决了这个问题:

sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"

您可以在此处找到更多信息:https ://getcomposer.org/doc/articles/troubleshooting.md#operation-timed-out-ipv6-issues-

于 2020-07-27T12:43:41.367 回答
0

检查是否zipunzip安装。如果它们丢失,Composer 将克隆 repo 而不是下载压缩版本。

于 2018-07-06T10:53:14.483 回答