Composer会静默跳过path仓库,需依次验证:运行composer config repositories确认条目存在;composer show --all | grep vendor/name检查包名是否列出;本地包composer.json必须合法且name与require完全一致;Linux/macOS用ls -la vendor/vendor/name、Windows用dir vendorendor ame验证symlink是否生效。

path仓库配置后require失败,怎么确认是否被识别
Composer 对 path 类型仓库极其严格,不满足任一硬性条件就会静默跳过——连 warning 都不输出。最直接的验证方式是让 Composer 自己“说话”:
- 运行
composer config repositories,检查输出里是否真有你加的那条type: "path"记录;没有,说明配置根本没写进去(常见于路径含空格、~或末尾带/) - 用
composer show --all | grep vendor/name确认包名是否出现在列表中;没出现,大概率是name字段大小写或分隔符(必须用短横线-,不能用下划线_)和require语句不一致 - 手动检查本地包根目录是否存在合法
composer.json:无 BOM、无尾逗号、全双引号、name值与require完全一致(比如"acme/utils"≠"Acme/utils")
为什么改了本地包代码,运行时还是旧逻辑
这不是 autoload 没刷新,而是 symlink 根本没生效,导致你改的是源码,PHP 加载的仍是 vendor/ 下的静态副本。这个 fallback 行为完全静默。
- Linux/macOS 下运行
ls -la vendor/vendor/name,看到->才是链接成功;Windows 下用dir vendorendor ame,看到JUNCTION才对 - 关键点不在主项目
composer.json,而在于**本地包自己的composer.json必须包含"options": {"symlink": true}**;缺这句,即使管理员权限运行终端,也会 fallback 到 copy 模式 - Docker 场景需额外加
--cap-add=SYS_ADMIN,且挂载方式必须透传宿主机符号链接能力(例如-v $(pwd)/../my-pkg:/workspace/my-pkg不行,得用绑定挂载并确保 uid/gid 一致)
autoload 映射没更新,怎么定位卡在哪一步
类 not found 的本质不是 Composer 没扫描,而是 PSR-4 映射路径没进 vendor/composer/autoload_psr4.php,或者映射指向了错误位置。
- 先跑
composer dump-autoload -v,观察输出里是否出现你的命名空间前缀(如App);如果压根没扫到,说明主项目composer.json的autoload配置语法有误(多逗号、BOM、单引号)或 PSR-4 键值末尾漏了反斜杠("App\"✅,"App"❌) - 如果扫到了但跳过了某些文件,注意看提示:可能是文件含 BOM、用了 PHP 短标签(
)、或存在.php.bak这类非法扩展名文件阻塞解析 - 打开
vendor/composer/autoload_psr4.php,搜索你的命名空间前缀,确认映射值是绝对路径(如$baseDir . '/src'),再手动ls检查该路径下是否存在对应类文件
Windows 下 path 依赖总失败,权限和路径陷阱有哪些
Windows 是 path 仓库问题高发区,核心矛盾集中在权限和路径解析上。
- 必须以**管理员身份**运行 CMD/PowerShell,否则
symlink创建失败且无任何提示;普通用户权限下会自动 fallback 到 copy - 路径不能含中文或空格,某些 PHP 版本解析会截断;建议用
realpath转成绝对路径再配置:composer config repositories.mypkg path "$(realpath ./local-pkg)" - 全局 bin 目录(
%APPDATA%Composerendorin)若被多次加入 PATH,容易触发 Windows 的 32767 字符长度限制,导致CreateProcess failed;应只保留一条,并优先用composer exec替代全局 PATH 调用
实际调试时,最容易被忽略的是:本地包 composer.json 里漏掉 "options": {"symlink": true} 这一行。它不像其他配置能事后补,必须在添加仓库前就写好;一旦 fallback 成 copy 模式,后续所有 dump-autoload 和 install 都只是在操作副本,跟源码毫无关系。











