簡體   English   中英

盡管有 --prefer-dist 標志,但作曲家依賴項的更新緩慢

[英]Slow updating of composer dependencies, despite --prefer-dist flag

為什么我的 Composer 依賴項最多需要兩分鍾才能更新,即使沒有更改?

一個流行的建議是附加--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"
        }
    }
}

此問題通常與在 CLI 環境中加載的 xdebug 相關。 (是否啟用 xdebug 並不重要。)

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

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

通過啟用最大程度的詳細信息和分析信息,可以獲得有關哪些操作需要這么長時間的更多信息。 (更換安裝更新,如果你正在更新包。)

composer install --prefer-dist -vvv --profile

可能會降低 Composer 速度的因素:

  • 正如所指出的, xdebug會影響 Composer 的性能。 運行composer diagnose也會警告你這一點。

  • 運行update而不是install 人們經常只是不斷地運行update 這使得 Composer 經歷了整個依賴解析過程,無論是否發生任何變化。 當您運行install ,Composer 直接從您的 .lock 文件中獲取需求,跳過依賴項解析過程。 您應該只在應用程序的開發生命周期內運行update 即便如此,這也不是您通常每天必須運行的東西。

  • 如果您有自己經常更新的特定依賴項,您可以嘗試通過運行composer update vendor/package --with-dependencies來簡化流程。

  • minimum-stability設置為dev 這極大地擴展了依賴解析器必須考慮的可能性。 除非您絕對別無選擇,否則您幾乎永遠不應該降低devminimum-stability 尋找替代方案,例如臨時使用內聯@dev標志。

似乎問題已解決,但這可能對某人有所幫助。

每當我運行 composer install 或 update 時,僅獲取https://packagist.org/packages.json文件就需要超過 10 秒的時間。 最終我發現問題與 IPv6 有關,因為從 IPv4 站點獲取文件只用了不到一秒鍾的時間。
問題是我的 ISP 不支持 IPv6,但我在以太網屬性中啟用了它。 在我的網絡設置中取消勾選Internet Protocol Version 6 (TCP/IPv6)后,安裝/更新速度顯着提高(從 200+ 秒下降到 10 秒)

您正在使用私有存儲庫。 這將不允許下載您包含的版本的壓縮版本,但必須克隆存儲庫。 此外,可能必須掃描整個存儲庫才能找到所需的版本。

您應該檢查是否可以選擇使用 Satis。 這樣你就可以准備你自己的軟件的 ZIP 並下載它,就像 Github 上托管的東西一樣(它有一個 API,Composer 使用它來允許下載 ZIP,即使它們沒有明確准備)。

我在內存不足的 VM 上運行 Symfony2 時遇到了這個問題。 我增加了機器的內存,它大大改善了。 您可以檢查系統上的內存,看看它是否可以升級。

我對composer update有同樣的問題,我使用composer selfupdate將 composer 本身更新到最新版本,現在它的速度可以接受。

實際上,xdebug 肯定會減慢速度。 不過,卸載 xdebug 並不理想。 一個不錯的選擇是使用 HHVM 並將其置於作曲家的職責中。

安裝 HHVM 非常輕松,而且 HHVM 本身比 PHP5 快得多。 這是雙贏 - YMMV,但即使 xdebug 不在圖片中,我也會在作曲家使用中獲得近 5 倍的速度增加(在眼球測功機上)。

如果您使用的是 OS X,那么此鏈接可能會有所幫助(我寫的關於此事的博客文章):

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

檢查是否安裝了zipunzip 如果它們丟失,Composer 將克隆存儲庫而不是下載壓縮版本。

我在/etc/gai.conf文件中添加了precedence :: ffff:0:0/96 100並嘗試更新。

我的解決方案 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 文件執行此操作!

好的,重新啟動對我有用的服務器,希望對您有用,我希望之前有人會發表此評論! 所以我不會花 2 周時間修復它

也叫

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

這使得 https 上的連接也運行這個

composer install --prefer-dist -vvv --profile

由於啟用了 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-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM