




启用Windows长路径支持并重启系统,即在组策略中启用“启用Win32长路径”或将注册表项LongPathsEnabled设为1,再重启电脑即可解决Composer因MAX_PATH限制导致的安装失败。
Windows默认启用的MAX_PATH限制(260字符)会让Composer在嵌套依赖较多时直接报错,典型错误是mkdir(): Invalid argument或failed to open stream: No such file or directory。这不是Composer本身的问题,而是NTFS路径长度策略导致的——它卡在了vendor目录深层嵌套生成阶段。
composer install -vvv,看报错位置是否出现在类似vendor/composer/installed.json或某深度嵌套包的src/Some/Nested/Directory/Class.php
composer update还会崩从Windows 10周年更新(1607)起,系统已内置长路径开关,但默认关闭。必须通过组策略或注册表启用,否则PHP进程(哪怕用最新版)仍受260字符限制。
gpedit.msc → 计算机配置 → 管理模板 → 系统 → 文件系统 → 启用Win32长路径 → 设为“已启用”HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem → 将LongPathsEnabled(DWORD)设为1
即使Windows启用了长路径,旧版PHP(\?\前缀API。
enable_dl = Off(默认)时,fopen()、mkdir()等函数才真正尊重长路径开关\\?\前缀;低于此版本(如1.x或2.0.x)即使系统开启也大概率失败var_dump(is_dir('\\\\?\\C:\\test\\...')); 返回true才算通路如果暂时无法改系统或升级环境(比如共享主机、CI流水线受限),可强制扁平化依赖结构,减少vendor内层级。
composer.json中添加:
{
"config": {
"vendor-dir": "vendor",
"fxp-asset": {
"installer-paths":
{
"npm-asset-library": "vendor/npm-asset"
}
}
}
}(注意:这是旧版fxp插件写法,仅适用于遗留项目)composer config --global use-symlinks false
composer create-project --no-install再手动删掉部分dev依赖——这容易引发autoload冲突,只建议调试用file_put_contents(): Failed to open stream,大概率是某个第三方脚本(比如post-install-cmd里的PHP文件)自己做了硬编码路径拼接,没走Composer的IO封装。这种得翻对应包源码,不能只指望系统设置。