windows下--prefer-source失败主因是终端gbk编码解码utf-8输出致乱码、composer.json含bom致json解析失败、/mnt/c/挂载点(9p协议)小文件i/o慢5–10倍;须执行chcp 65001、保存为utf-8无bom、项目移至wsl本地ext4路径。

Windows 下用 --prefer-source 装依赖,vendor 目录放在 /mnt/c 就注定慢;中文乱码和 BOM 问题会直接导致命令失败,不是性能问题,是根本跑不起来。
Windows CMD/PowerShell 中文乱码导致 composer install --prefer-source 报错
Composer 固定输出 UTF-8 字节流,但 Windows 终端默认用 GBK(chcp 936)解码,结果把中文路径、包名、错误提示全变成问号或八进制转义(如 \344\273\245),严重时连 composer.json 解析都失败。
- 临时修复:运行
chcp 65001切到 UTF-8 编码,再执行命令(仅当前窗口生效) - PowerShell 持久方案:把
chcp 65001 > $null加到$PROFILE文件末尾 - CI 脚本中建议显式调用:
powershell -ExecutionPolicy RemoteSigned -Command "chcp 65001 | Out-Null; composer install --prefer-source" - 加
--no-ansi可绕过 ANSI 控制符干扰,调试阶段更干净
composer.json 带 BOM 导致 JSON decode error: Syntax error
这不是语法错误,而是文件开头有 \xEF\xBB\xBF(UTF-8 BOM),PHP 的 json_decode() 一读就拒。尤其在 --prefer-source 场景下,Composer 需频繁读取本地 composer.json(比如 clone 后校验),BOM 会让整个流程中断。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 确认方式:VS Code 右下角看编码标识——显示
UTF-8 with BOM就是它;Linux/macOS 用file -i composer.json - VS Code 修复:右下角点编码名 →
Save with Encoding→ 选UTF-8(注意不是UTF-8 with BOM) - PowerShell 一行修复:
(Get-Content composer.json -Raw) -replace "\uFEFF", "" | Set-Content composer.json -Encoding UTF8 - 绝对不要用 Windows 记事本保存
composer.json,它默认加 BOM
WSL 下 --prefer-source 的 IO 瓶颈在 /mnt/c 挂载点
--prefer-source 必然触发大量 git clone,而每个 clone 都要创建 .git 目录、写 thousands 个小文件、频繁 stat/fstat 元数据——这些操作在 WSL 的 /mnt/c(9P 协议挂载)上极低效,实测比本地 ext4 慢 5–10 倍。
- 必须把项目根目录移到 WSL 本地文件系统,例如
~/projects/my-app,而非/mnt/c/Users/name/project - 确保
vendor/和.git都落在 ext4 分区上;git clone过程中可运行df -T .确认文件系统类型 - 如果必须从 Windows 同步代码,用
rsync或 Git 的core.autocrlf配合 WSL 内部工作流,别直接在/mnt/c下运行composer install --prefer-source
preferred-install 设为 source 却没生效的真正原因
preferred-install 只对「新安装」的包生效,已缓存的 dist 包、lock 文件里记录的 source/dist 方式、甚至环境变量 COMPOSER_PREFER_SOURCE=1 都可能覆盖它——你看到的“还是走 dist”,大概率是旧状态残留。
- 验证配置是否起效的唯一干净方式:删掉
vendor/和composer.lock,再跑composer install --prefer-source - 检查是否误加了
--prefer-dist参数(它优先级高于preferred-install) - 查看目标包的元信息:
composer show vendor/package,确认其dist字段是否存在且非空;私有包若没打 tag 或没配 archive 模板,--prefer-source才是唯一选择 - 全局设置命令:
composer config -g preferred-install source,但注意它会写入%APPDATA%\Composer\config.json(Windows)或~/.composer/config.json(macOS/Linux)
真正卡住 --prefer-source 的从来不是参数本身,而是终端编码、文件编码、挂载点文件系统这三处——它们不出问题,git clone 才能安静跑完;出一点,整个流程就停在不可读的报错或无声的等待里。










