答案是:composer对本地包name字段与require声明严格逐字匹配,大小写、分隔符(仅短横线-)必须完全一致,否则静默失败且不报错;路径须指向含合法composer.json的目录,配置需在主项目根composer.json的repositories数组中声明为type:"path"。

本地包 name 字段和 require 不一致
Composer 对包名大小写、分隔符完全敏感,name 必须和 composer require 时写的字符串逐字相同。比如本地包 composer.json 里写的是 "acme/utils",但你执行了 composer require Acme/Utils 或 acme_utils,就会静默失败——composer show --all 根本不会列出这个包。
- 检查本地包根目录下的
composer.json是否存在且语法合法(无尾逗号、全双引号) - 确认
name值不含下划线、大写字母,只用小写字母 + 短横线- - 路径中不能有中文、空格(Windows 上尤其容易触发解析失败)
path 仓库配置位置或格式错误
repositories 必须写在项目根目录 composer.json 的最外层数组里,不能嵌套在 require、config 或其他字段下。type 必须是 "path",不是 "package" 或 "vcs";url 必须是相对于项目 composer.json 的路径,比如 "./packages/my-utils",不能带 file://,也不能用绝对路径(如 C:/xxx 或 /home/user/xxx)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 整个
repositories是数组:即使只配一个,也要写成[{ "type": "path", "url": "./packages/my-utils" }] -
url末尾不能加/,"./packages/my-utils/"会导致 Composer 完全忽略该仓库 - 本地包目录必须包含
composer.json,否则该仓库被跳过,且不报错
版本约束不匹配导致“找不到包”
path 类型仓库默认只认 dev- 开头的开发分支名,比如 dev-main、dev-develop。它基本忽略本地包 composer.json 中的 version 字段,而是按 Git HEAD 所在分支推断。如果你没设 "minimum-stability": "dev",又没在 require 中显式写 "dev-main",Composer 就会过滤掉这个包。
- 本地包需已运行
git init并至少有一个 commit(否则 Composer 拒绝加载) - 项目
composer.json的require应写为"acme/utils": "dev-main",不是"*"或"^1.0" - 若本地包默认分支是
develop,则require必须同步改为"dev-develop"
autoload 映射没更新或 symlink 失败
包“装进来了”不代表类能用。autoload 失效和 symlink fallback 是两个最隐蔽的问题:前者让你 new 报错,后者让你改了代码却看不到效果。
- 本地包自己的
composer.json必须声明合法的autoload(如"psr-4": {"Acme\": "src/"}),否则composer dump-autoload什么也注册不了 - 要启用符号链接,关键不是主项目配
"symlink": true,而是本地包的composer.json中必须有"options": {"symlink": true} - Windows 需管理员权限运行终端;Docker 需加
--cap-add=SYS_ADMIN,否则静默 fallback 到 copy - 验证是否真用了 symlink:
ls -la vendor/acme/utils(Linux/macOS)或dir vendorcmeutils(Windows),看到箭头或JUNCTION才算成功










