答案是name字段必须与require逐字一致、路径须指向含composer.json的目录且不带尾部斜杠、本地包需git init并有commit;symlink需在本地包composer.json中声明,autoload修改后须执行composer dump-autoload -o。

本地包没被识别,90%是name或路径写错了
Composer对path仓库的匹配极其严格,不模糊、不自动补全、不忽略大小写。一旦composer install报Could not find package vendor/name,且composer show --all里压根没这包,基本就是这里出问题。
-
name字段必须和require中写的**逐字一致**:比如本地包composer.json里写"name": "acme/utils",你就得"acme/utils": "dev-main";写成"Acme/utils"或"acme_utils"都不行 - 路径
url必须指向**含composer.json的目录**,不是文件,也不能带尾部/——"../my-pkg/"会被静默忽略,得写"../my-pkg" - 路径是相对于主项目
composer.json的位置,不是你当前终端所在目录。比如主项目在/home/user/app,本地包在/home/user/pkg,就该写"../pkg",而不是"/home/user/pkg"(除非你真要用绝对路径) - Windows用户要避开中文路径和空格,某些PHP版本解析会失败
改了代码没生效,大概率是symlink没真正建起来
Path仓库默认尝试软链接,但失败时会静默fallback到复制(copy),结果你改本地源码,vendor/里还是旧副本——这是最隐蔽的调试陷阱。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 关键不在主项目的
repositories里加"options": {"symlink": true},而在于**本地包自己的composer.json里是否声明了"options": {"symlink": true}** - Windows下必须以管理员身份运行终端,否则
mklink失败且无提示 - Docker场景需加
--cap-add=SYS_ADMIN,并确认挂载方式支持符号链接(如-v $(pwd)/pkg:/app/pkg) - 验证是否真用了symlink:
ls -la vendor/vendor/name(Linux/macOS)看到->箭头,或dir vendor\vendor\name(Windows)看到JUNCTION字样才算成功;普通文件夹说明fallback了
autoload不生效,不是Composer没加载,而是映射没更新
Path仓库让包“存在”,但类能不能new或use,取决于autoload映射是否包含它的真实路径。即使本地包composer.json写了"psr-4": {"Acme": "src/"},主项目也不会自动重载这个映射。
- 每次修改本地包的
autoload配置后,必须手动执行composer dump-autoload -o(加-o生成优化版) - 如果用Xdebug调试,IDE里设置的路径必须和本地包磁盘真实路径完全一致——比如IDE指向
/Users/me/pkg,但包实际在/Users/me/my-pkg,断点就永远打不进 - 检查autoload是否生效:运行
composer show -s vendor/name,看输出里的autoload段是否和本地包composer.json一致
require写错版本号,直接导致安装失败
Path仓库下的包,Composer默认只认dev-开头的开发分支名,不会读取本地包composer.json里的version字段。写错就等于告诉Composer:“这个包我不要”。
- 本地包没打tag时,
version字段建议设为"dev-main"或"dev-master",并在主项目中require时对应写"dev-main" - 如果本地包默认分支是
develop,就得同步改require为"dev-develop",不能写"*"或"^1.0" - 执行
composer update vendor/name而非全量update,避免意外刷新其他依赖 - 本地包目录必须已运行
git init并至少有一个commit,否则Composer拒绝加载
SYS_ADMIN,回退成了copy;或者IDE路径映射差了一个/,断点始终不触发。这些细节不爆错,却让问题延迟暴露。

















