必须在主项目composer.json的repositories中配置{"type":"path","url":"../my-package"}并设"options":{"symlink":true},再执行composer update vendor/name;本地包需有合法composer.json且name与require完全一致,url用相对路径,版本用dev-main。

Composer本地开发要用path仓库,核心就一条:别往require里塞路径,必须在repositories里配{"type":"path","url":"..."},否则根本找不到包。
为什么composer require vendor/name:dev-main报“Could not find package”
不是网络问题,也不是权限问题,是Composer压根没“看见”你的本地目录。它只从repositories数组里找源,require字段只声明“我要谁”,不负责“去哪找”。
-
repositories必须写在主项目(你正在开发的那个项目的)composer.json里,不能写在本地包自己的composer.json中 -
url必须是相对路径(如"../my-package"),绝对路径在Windows上极易静默失败(盘符、反斜杠、空格都会中断) - 本地包目录下必须有合法的
composer.json,且其中name字段(如"acme/utils")要和require里写的完全一致(大小写敏感) - 版本约束必须用
dev-main、dev-develop这类分支名,不能写1.0.0——path源下Composer忽略version字段,只认当前Git HEAD所在分支
改了本地包代码,为什么主项目里没生效
默认行为是复制(copy),不是链接(symlink)。你改了../my-package/src/Helper.php,vendor/acme/utils/Helper.php还是旧文件。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须显式启用符号链接:在主项目
composer.json的repositories条目里加"options": {"symlink": true},或者在本地包自己的composer.json里加同样字段(效果等价) - 执行
composer update acme/utils(不是dump-autoload),才会重建symlink - 验证是否成功:
ls -la vendor/acme/utils应显示箭头指向源目录;Windows用户用dir vendor\acme\utils看是否为“快捷方式”类型 - Windows需开启开发者模式或以管理员权限运行命令行,否则symlink创建会失败且无提示
composer install vs composer update vendor/name 的关键区别
composer install只重建缺失的链接,不会刷新已有链接的目标路径。它依赖composer.lock记录的当前解析结果,而这个结果在首次require或update时就已固化。
- 改完本地包代码后,
composer install什么也不做 - 必须运行
composer update acme/utils才会重新解析path、重建symlink -
composer update不带参数会全量重算,慢且易引入意外变更;指定包名更快、更安全 - CI/CD环境下链接必然失败(路径不存在),上线前必须移除
repositories中的path条目
最容易被忽略的是:symlink是否真正生效,不取决于主项目配置,而取决于本地包composer.json里有没有"options": {"symlink": true}——缺这句,Windows和Docker都大概率fallback到copy,且无任何错误提示。










