path仓库require失败90%因name或路径不匹配:name须大小写、分隔符(仅短横线-)与require完全一致,路径须指向含composer.json的目录且为相对路径,末尾不可加/。

path仓库配置后require失败,90%是name或路径不匹配
Composer不会模糊匹配包名或路径,name字段必须和require中写的完全一致:大小写、分隔符(只能用短横线-,不能用下划线_或大写字母)、vendor名全部对齐。路径也一样——url指向的是**含composer.json的目录**,不是文件,且必须是相对于主项目composer.json的位置(如"../my-pkg"),不能是 shell 当前工作目录下的相对路径。
常见错误现象:Could not find package vendor/name,但composer show --all里根本没出现该包名。
- 检查本地包根目录下是否存在合法
composer.json(无尾逗号、全双引号、语法有效) - 确认
name字段值与require中字符串逐字相同,例如"acme/utils"≠"Acme/utils" - 路径末尾不要加
/,"url": "../my-pkg/"会导致静默忽略整个仓库 - Windows 用户避免路径含中文或空格,某些 PHP 版本解析会失败
symlink没生效,改了代码却没反应
path 类型仓库默认尝试创建符号链接,但失败时会静默回退到复制(copy),结果你改本地源码,vendor/里还是旧副本——这是最隐蔽的调试陷阱。
关键不在主项目配"symlink": true,而在于**本地包自己的composer.json里是否声明了"options": {"symlink": true}**。缺这句,Windows 上即使管理员权限运行终端,也会 fallback;Docker 容器挂载宿主机目录时也常因权限丢失 symlink 能力。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 验证是否真用了 symlink:
ls -la vendor/vendor/name(Linux/macOS)或dir vendor\vendor\name(Windows),看到箭头或 JUNCTION 才是成功 - 若显示为普通文件夹,说明 fallback 成 copy,立刻检查本地包
composer.json是否漏了options段 - Windows 下必须以管理员身份运行终端,否则 symlink 创建失败且无提示
- Docker 场景需在
docker run时加--cap-add=SYS_ADMIN并确保挂载方式支持 symlink
autoload映射没更新,类找不到但包已安装
path 仓库让包“存在”,但类能否被new或use,取决于 autoload 映射是否包含它的真实路径。即使本地包composer.json写了"psr-4": {"Acme": "src/"},主项目也不会自动重载这个映射。
- 手动执行
composer dump-autoload -o强制刷新自动加载规则 - 确认本地包
composer.json中autoload段路径是相对于其自身根目录的(如"src/"指该包根目录下的src/) - Xdebug 断点失效?检查 IDE 中配置的路径是否与真实磁盘路径一致(尤其 Windows 和 Docker 挂载场景)
依赖冲突提示里混着path包,怎么定位真正源头
当composer update报冲突,而错误信息里出现了你本地的 path 包名,别急着改它的版本约束——它大概率只是“被牵连”的间接依赖,真正冲突源在其他远程包之间。
- 先跑
composer why vendor/name,看谁拉进了这个 path 包;再对那个“上游包”重复执行why,一层层往上追 - 临时注释掉
repositories里的 path 配置,执行composer update --dry-run,观察冲突是否消失——如果消失了,说明 path 包的require段引入了不兼容约束 - 检查 path 包自身的
composer.json里require是否锁死了某个库的旧版本(比如"monolog/monolog": "1.25.0"),而主项目需要 2.x - path 包的
version字段如果写了固定值(如"version": "1.0.0"),可能干扰 Solver 的版本选择逻辑;建议删掉或设为"dev-main"
最易被忽略的是:path 包自己没做composer validate,composer.json里一个多余逗号或错位引号,就可能导致依赖解析中途失败,错误提示却指向下游包。










