composer本身不支持monorepo,需用path类型仓库将本地目录伪装成包源;必须满足四条件:type为"path"、url为精确相对路径、子包name与require键完全一致、版本约束用"@dev"而非"^1.0"。

Composer 本身不支持 Monorepo,所谓“多仓库依赖”在单体仓里其实是用 path 类型仓库把本地目录“伪装”成远程包源——配错任意一环,就会静默加载 Packagist 上的同名包,而不是你刚改的代码。
为什么 composer install 不报错但类找不到
常见现象是 Class not found,autoload 配置、命名空间、文件路径全对,但就是不生效。根本原因不是自动加载没刷,而是 Composer 根本没加载你的子包。
- 子包目录下没有合法的
composer.json,或缺name字段(比如写成"name": "my-sdk"而不是全限定名"acme/my-sdk") - 根项目
composer.json的require键写的是"my-sdk": "*@dev",但子包name是"acme/my-sdk"—— 名字必须一字不差,大小写、连字符、斜杠方向全部敏感 - 子包
composer.json没写autoload,或 PSR-4 映射路径指向了不存在的目录(比如"src/": "src/"但实际代码在lib/) -
repositories没写在根项目composer.json顶层,而是塞进了某个子包里,完全无效
path 仓库配置必须满足哪四个硬性条件
缺一不可,错一个字符就退化为远程包加载或静默失败:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
type必须是"path",不能是"package"或"composer" -
url必须是相对于根composer.json的**精确相对路径**,例如"packages/logging";不能带./,不能用绝对路径,也不能指望"packages/*"自动递归(除非你用 Composer 2.2+ 且每个子目录下都有合法composer.json) - 子包
composer.json中的name字段必须非空、格式正确(如"acme/logging"),且与根项目require中的键完全一致 - 根项目
require中对应包的版本约束必须用"*@dev"、"@dev"或"dev-main",**绝不能写"^1.0"**——否则 Composer 会跳过本地源去 Packagist 匹配已发布版本
符号链接(symlink)为什么没生效
预期是 vendor/acme/logging 指向 packages/logging,结果却是复制了一份——说明软链没建成功,Composer 退化为 copy 模式。
- 必须在
repositories条目中显式加"options": {"symlink": true},默认值是false - Windows 用户需确认终端以管理员身份运行,或已启用“开发者模式”(否则
mklink被禁用) - Linux/macOS 若仍失败,检查
vendor/所在文件系统是否挂载了noexec或nosymfollow - 改完
repositories后,必须先运行composer clear-cache,否则可能读旧缓存导致路径不识别
子包之间互相依赖时怎么配
子包 A require 子包 B,但安装后提示找不到 B——不是 A 写错了,而是 B 没被根项目“认证”为合法包源。
- 所有被依赖的子包,都必须单独出现在根
composer.json的repositories数组中 - 子包 B 自己的
composer.json再规范也没用,Composer 只扫描根目录下的repositories声明 - 子包 B 的
name和它在根项目require中的键必须完全一致,且版本约束同样只能用"*@dev" - 如果子包 B 还依赖 C,C 也得进
repositories——依赖树解析是逐层向上的,缺任何一环都会卡住
最易被忽略的是:每次修改子包的 composer.json 或根项目的 repositories,都得清缓存 + 删 vendor/xxx 目录再重装,composer dump-autoload 完全不触发内容同步。










