Composer install 报“File missing”本质是依赖写入或autoload生成中断所致,常见于vendor目录不完整、autoload.php缺失、Windows符号链接失败、autoload配置未更新或权限/缓存问题,需按序清理重试并检查verbose输出。

Composer install 报错 “File missing” 的常见触发点
这个提示几乎从不单独出现,而是伴随具体路径和文件名,比如 Class not found、require(): failed to open stream 或更直接的 file_put_contents(/path/to/vendor/autoload.php): failed to open stream。本质是 Composer 未能完成依赖写入或自动加载文件生成,不是“包本身丢文件”,而是本地操作中断或权限/缓存导致的中间态损坏。
检查 vendor 目录与 autoload.php 是否真实存在
进入项目根目录,运行:
ls -la vendor/
如果 vendor 为空或只含 composer 子目录,说明安装中途失败;若存在但缺 autoload.php,则自动加载未生成。此时不要手动创建该文件——它由 Composer 自动生成。应优先清理残留再重试:
- 删除整个
vendor目录和composer.lock(保留composer.json) - 确认当前用户对项目目录有读写权限(尤其在 Docker 或 WSL 环境下容易因 UID 不匹配导致写入失败)
- 运行
composer install --no-cache强制跳过本地缓存,排除缓存污染可能
Windows 下 symlink 失败引发的 “missing” 假象
Composer 在 Windows 默认尝试创建符号链接(如 vendor/bin/phpunit → ../phpunit/phpunit/phpunit),但若未以管理员身份运行终端或启用了开发者模式,链接创建失败,后续脚本执行时就会报找不到 phpunit 这类二进制文件——看起来像“文件丢失”,实则是链接没建成功。
解决方式:
- 用管理员权限打开终端再运行
composer install - 或全局禁用 symlinks:
composer config --global use-symlinks false - 也可临时加参数绕过:
composer install --no-bin-links(跳过二进制链接,不影响功能)
vendor/composer/autoload_*.php 被误删或未更新
当改过 composer.json 中的 autoload 配置(如添加了 psr-4 映射)却没运行 composer dump-autoload,旧的自动加载文件仍指向不存在的命名空间路径,运行时就会提示“Class not found”,日志里可能显示某个 autoload_*.php 文件中引用了不存在的 PHP 文件。
这时要区分两种情况:
- 只是自动加载映射过期:运行
composer dump-autoload -o重新生成优化版映射 - 同时存在文件物理缺失(如删了 src/ 下某个类文件):需人工核对
composer.json中的 autoload 配置是否还匹配实际目录结构 - 若使用了
classmap并且源文件被移动或删除,必须重新运行composer dump-autoload才能刷新 classmap 列表
真正难排查的是混合场景:权限问题导致部分包解压失败 + autoload 生成跳过错误 + 开发者手动删了 vendor 下某个子目录——这种情况下,--verbose 输出比报错信息本身更有价值,重点关注最后一段 warning 或 notice 行里的具体路径和 errno。










