因为composer install只依据composer.lock还原依赖,不读取composer.json中手动新增的require;添加本地包必须用composer require或composer update同步lock文件。

为什么 composer install 不加载本地修改的包?
因为 Composer 默认从 packagist.org 或配置的仓库拉取已发布版本,即使你把源码 clone 到本地,composer.json 里写的还是 `"vendor/name": "^1.2"` 这类稳定版本约束,根本不会读你本地文件。
解决思路只有两个:一是用 path 仓库类型强制指向本地目录;二是用 composer link(仅限已安装包)做软链接。前者更可控,后者易出错但适合快速验证。
用 path 仓库替代 Packagist 源
这是最稳妥、可复现的方式,适用于开发中频繁改本地包又想被主项目实时感知的场景。
- 在主项目的
composer.json顶部加repositories块,指向你的本地包路径:"repositories": [ { "type": "path", "url": "../my-local-package" } ] - 然后把依赖改成
"require"中用"dev-main"(或对应分支名)代替版本号:"vendor/my-local-package": "dev-main"
- 运行
composer update vendor/my-local-package—— 注意必须带包名,否则可能误更新其他包 - 完成后,
vendor/vendor/my-local-package会变成一个符号链接,指向你指定的../my-local-package
⚠️ 容易踩的坑:url 必须是相对路径(相对于主项目根目录),不能用 ~/ 或绝对路径;且目标目录下必须有合法的 composer.json,否则报 Could not parse version constraint
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer link 的适用边界和风险
这个命令只对「已经通过 Composer 安装过的包」生效,本质是在 vendor/ 下创建软链接,绕过 require 版本约束。但它不改 composer.lock,也不同步 autoload,容易导致后续 composer update 被覆盖。
- 先确保包已安装:
composer require vendor/name - 再进本地包目录,执行:
composer link(需全局安装composer-plugin-link或 Composer 2.4+ 内置支持) - 回到主项目,执行:
composer link vendor/name
常见失败提示:Package vendor/name is not installed —— 说明它没出现在 composer.lock 的 packages 列表里,可能是被 require-dev 引入,或之前用 --no-install 跳过了安装。
调试时怎么确认链接是否生效?
别只看 ls -la vendor/,得验证实际加载行为:
- 检查
vendor/vendor/name是否为lrwxr-xr-x类型(即软链接),目标路径是否正确 - 运行
composer show vendor/name,输出里应含source: path /xxx/yyy字样 - 在主项目中
var_dump(class_exists('Vendor\Name\SomeClass')),如果返回false,大概率是autoload没刷新,手动跑一次composer dump-autoload - 改一行本地包里的
echo,刷新主项目页面——这才是最终验证
真正麻烦的不是链接本身,而是当多人协作或 CI 环境里,path 仓库配置容易被忽略,或者 composer link 状态无法 commit,这类非声明式操作最容易在交接时断掉。

















