Composer在Windows/WSL下vendor扫描慢的本质是Defender逐文件扫描、WSL对NTFS路径低效及classmap全量遍历叠加所致;应禁用classmap、将项目移至WSL原生ext4分区、并把项目路径加入Defender排除列表。

Composer 在中文环境(尤其是 Windows + WSL 或 NTFS 挂载卷)下执行 composer install 或 composer update 时,vendor 目录扫描变慢,本质不是“中文字符”本身导致的,而是文件系统层面对长路径、大量小文件、UTF-8 路径编码与 NTFS/WSL 交互的叠加效应。优化方向必须绕过「全量扫描」,而非试图「加速扫描」。
为什么 vendor 扫描会触发全量遍历?
Composer 默认启用 classmap 自动生成功能(尤其在 "optimize-autoloader": true 时),它会递归扫描 vendor 下所有 .php 文件来构建类名到路径的映射。中文路径本身不报错,但以下情况会显著拖慢:
- WSL1 下 NTFS 挂载点对深度嵌套目录的
readdir延迟极高(单次opendir可达 200ms+) - Windows Defender 实时扫描对
vendor中数万小文件触发逐个 AV 检查(尤其含中文路径时更易被误标为可疑) - Composer 2.2+ 默认开启
plugin-api兼容扫描,部分插件(如hirak/prestissimo已弃用,但残留配置仍生效)会额外触发vendor遍历
禁用 classmap 自动生成(最直接有效)
如果你项目未使用 psr-0 或手动注册的非标准类加载逻辑,且全部依赖 Composer 的 PSR-4 自动加载,则 classmap 完全冗余。禁用后,Composer 不再扫描 vendor 中的 PHP 文件,安装速度可提升 3–8 倍。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在
composer.json中移除或设为false:"optimize-autoloader"和"classmap-authoritative" - 确认无自定义
autoload.classmap配置项(包括 root 和各 vendor 包的composer.json) - 运行
composer install --no-autoloader后手动执行composer dump-autoload --no-dev(仅生成 PSR-4 映射)
规避 Windows Defender 实时扫描(Windows 主机必做)
即使禁用 classmap,vendor 解压阶段仍会触发 Defender 对每个 .zip 内文件的解压后扫描——这是真正卡顿主因,而非后续 autoload 扫描。
- 将项目目录添加进 Defender 排除列表:
Set-MpPreference -ExclusionPath "D:myproject"(PowerShell 管理员运行) - 禁用
RealtimeMonitoring仅针对该目录:Set-MpPreference -DisableRealtimeMonitoring $true(不推荐全局关) - 改用
7z替代内置 zip 解压:在composer.json加"config": {"use-include-path": false, "archive-format": "7z"},并确保系统已安装 7-Zip CLI
WSL2 下的路径挂载策略调整
不要把项目放在 /mnt/c/xxx 下——这是性能黑洞。WSL2 的 9P 协议对 NTFS 路径的 stat/readdir 操作有严重放大延迟。
- 项目必须放在 WSL2 原生 ext4 分区(如
~/projects/myapp) - 若需从 Windows 访问,用
\wsl$Ubuntuhomeuserprojects而非/mnt/c - 在 WSL2 中禁用 Windows path 自动挂载:
echo -e "[automount] enabled = false" | sudo tee -a /etc/wsl.conf && wsl --shutdown
真正卡住你的从来不是「中文」,而是 Windows Defender 对 vendor 数万小文件的逐个检查 + WSL 对 NTFS 路径的低效抽象。绕过 classmap、隔离 Defender、迁出 /mnt/c,三者缺一不可。漏掉任意一项,其他优化都只是毛毛雨。


















