composer在windows下慢的核心原因是杀软实时扫描、i/o延迟及配置未适配;应精准排除%appdata%\composer、%localappdata%\composer\files、vendor/和%temp%\composer*路径,切换阿里云镜像,启用parallel-downloads 6–10,并清缓存验证。

Composer 在 Windows 下慢,核心原因不是 PHP 或网络本身,而是杀毒软件实时扫描 + 文件系统 I/O 延迟 + 默认配置未适配本地环境;关掉杀软或换 Linux 不是解法,精准排除路径、切镜像、调并发才是关键。
为什么杀毒软件会让 Composer 卡在 Installing dependencies
Windows Defender、火绒、360 等默认对 %TEMP%、%APPDATA%\Composer、%LOCALAPPDATA%\Composer\files 和项目 vendor/ 目录做实时扫描。每次解压 ZIP、写入 autoload_classmap.php、生成 composer.lock 都触发扫描,I/O 延迟从几毫秒拉到几百毫秒,叠加后整体会卡住不动。
常见错误现象:Installing dependencies from lock file 后长时间无响应,strace 或进程监视器能看到大量 CreateFile 被阻塞。
- 必须将以下路径加入杀软“排除列表”(不是“信任区”或“白名单”,要明确选“文件夹排除”):
%APPDATA%\Composer、%LOCALAPPDATA%\Composer\files、vendor/(每个项目)、%TEMP%\composer* - Windows Defender 不识别环境变量,得手动展开成完整路径,例如:
C:\Users\Alice\AppData\Roaming\Composer - 添加后无需重启系统,但建议关闭终端重开命令行再试
parallel-downloads 设了没生效?检查这三件事
parallel-downloads 是 Composer 2.2+ 原生支持的并发下载机制,但它只对 composer install 生效,且极易因配置错位失效。
常见错误现象:设了 15 还是串行下载、Downloading 卡在单个包、报 file_put_contents(/tmp/): failed to open stream。
- 确认版本:
composer --version输出必须是2.2+;若为1.x,先运行composer self-update - 查当前值:
composer config -g parallel-downloads,输出应为数字(如10),不是null或空字符串 - 设值命令必须带
-g:composer config -g parallel-downloads 10;设成20容易触发临时文件竞争,6–10更稳 - 该参数不作用于
composer update—— 它本质是依赖求解器重算,不是下载瓶颈
镜像源切了但 still downloading packagist.org?缓存和配置冲突
换了阿里云镜像却仍卡在 Downloading https://api.packagist.org/packages.json,说明镜像根本没走通。这不是 DNS 或网络问题,而是缓存残留或配置覆盖。
常见错误现象:composer config -g repo.packagist 显示正确 URL,但 composer install -v 日志里仍出现 packagist.org 域名。
- 立刻清缓存:
composer clear-cache—— 否则旧元数据会持续干扰 - 检查项目级
composer.json是否硬编码了repositories,它会**优先覆盖**全局镜像配置 - 验证是否真走镜像:
curl -I https://mirrors.aliyun.com/composer/packages.json应秒回200;若超时或503,换清华源:composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/ - 某些企业网络会劫持 HTTPS SNI,可临时加环境变量绕过:
set COMPOSER_NO_INTERACTION=1(Windows CMD)
vendor 目录写入慢?别怪 Composer,是 Windows 文件系统在拖后腿
即使下载和解压都快了,vendor/ 目录创建后仍卡在 “Generating autoload files”,大概率是 NTFS 权限继承、防病毒扫描或路径挂载位置不对导致的。
常见错误现象:Writing lock file 很快,但之后 Generating autoload files 耗时 >30 秒,vendor/autoload.php 文件大小异常小(
- 确保项目目录不在
C:\Users\下直接创建 —— Windows 用户目录默认开启 OneDrive 同步和索引,严重拖慢批量文件写入 - 避免放在
OneDrive、Google Drive或任何云同步文件夹内 - 禁用
xdebug:php -d xdebug.mode=off $(which composer) install,Xdebug 会让 autoload 生成慢 5 倍以上 - CI 场景下务必加
--no-autoloader --no-scripts --no-dev,autoload 可后续单独用composer dump-autoload --optimize补
最常被忽略的一点:所有优化都依赖 composer.lock 文件存在且已提交。没有它,composer install 就退化成 update,本地 CPU 开始穷举版本组合——这时再快的镜像和并发也救不了你。











