composer如何解决在WSL环境下运行缓慢的问题_Windows子系统composer优化【指南】

11次阅读

根本原因是WSL通过9P协议挂载windows文件系统导致I/O性能极差,应将项目移至WSL本地ext4路径(如~/projects/),再禁用windows Defender对ext4.vhdx的扫描,最后优化composer配置。

composer如何解决在WSL环境下运行缓慢的问题_Windows子系统composer优化【指南】

为什么WSL中composer install特别慢

根本原因是WSL默认通过9P协议挂载Windows文件系统(如/mnt/c/),而composer大量读写vendor/composer.lock和临时缓存时,9P的元数据操作和小文件I/O性能极差——实测比原生linux慢5–10倍。不是网络问题,也不是php配置问题,是文件系统层瓶颈。

把项目移到WSL本地文件系统(必须)

这是最有效、最直接的优化动作。所有后续优化都建立在此基础上,否则其他调整收效甚微。

  • 不要把项目放在/mnt/c/Users/xxx/project这类路径下
  • 把项目复制或初始化到WSL内部路径,例如~/projects/myapp(对应/home/yourname/projects/myapp
  • 确认路径归属:运行df -h .,输出中Filesystem列应为ext4zfs,而非9p
  • 如果用vs code Remote-WSL打开项目,请确保工作区路径是~/...而非/mnt/c/...

禁用WIndows Defender实时扫描(关键但常被忽略)

Windows Defender会深度扫描WSL2的虚拟磁盘文件(ext4.vhdx),尤其在composer install解压数百个包时触发高频IO+扫描冲突,导致卡顿甚至超时。

  • 打开Windows安全中心 → “病毒和威胁防护” → “管理设置” → “添加或删除排除项”
  • 添加排除路径:C:Users{user}AppDataLocalPackages{distro-name}LocalStateext4.vhdx
  • 也可用PowerShell一次性添加(以管理员身份运行):
    Set-MpPreference -ExclusionPath "C:UsersYourNameAppDataLocalPackagesubuntu_123456789LocalStateext4.vhdx"
  • 注意:排除的是.vhdx文件本身,不是整个LocalState目录

调整composer配置提升执行效率

在WSL本地路径前提下,这些配置能进一步减少等待时间:

  • 启用并行下载:composer config -g process-timeout 3600 + composer config -g use-include-path true
  • 强制使用https镜像源(国内用户):composer config -g repo.packagist composer https://packagist.phpcomposer.com(或阿里云腾讯云镜像)
  • 关闭xdebug(若启用):php -d xdebug.mode=off $(which composer) install,因为xdebug会显著拖慢autoload生成
  • 避免--no-dev误用:仅在部署时加,开发阶段保留dev-dependencies可避免反复重装

真正卡住你的,往往不是composer命令本身,而是它在错误的文件系统上反复open/close成百上千个小文件。先挪路径,再关杀软,最后调参数——顺序不能反。很多“优化指南”跳过第一步,结果后面全白忙。

text=ZqhQzanResources