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

必须在主项目composer.json的repositories里配{"type":"path","url":"../my-package"},不是往require里塞路径;本地改了代码不生效?默认是复制,得加"options": {"symlink": true}并执行composer update vendor/name。
怎么写repositories才被识别
Composer 只在项目根目录的composer.json顶层repositories数组里找 path 源,其他位置全无效。常见错误包括:写进require、写成repository(少 s)、嵌套在别的字段下。
-
url必须是相对路径(如"../my-pkg"),指向**含composer.json的目录**,不能以/结尾 - 绝对路径在 Windows 上极易静默失败(盘符、空格、反斜杠都会中断)
- 如果本地包目录下没有合法
composer.json(比如语法错、缺name),Composer 会跳过该仓库,不报错也不提示 - 整个
repositories是数组,哪怕只加一个也要写成[{"type":"path","url":"../my-pkg"}]
require里版本号为什么总报“Could not find package”
根本原因不是网络或权限,而是 Composer 根本没“看见”你的本地目录——它只从repositories里找源,require字段只负责声明“我要哪个包”,不负责“去哪找”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
name字段必须和require中写的**逐字一致**:大小写、分隔符(只能用短横线-,不能用下划线_或大写字母)全部对齐 - 版本约束必须用
dev-main、dev-develop这类分支名,不能写1.0.0——path 源下 Composer 忽略version字段,只认当前 Git HEAD 所在分支 - 本地包目录必须运行过
git init且至少有一个 commit,否则 Composer 拒绝加载 - 执行
composer require vendor/name:dev-main第一次引入时,才会触发 symlink 创建
改了本地代码,为什么项目里还是旧逻辑
默认行为是复制(copy),不是链接(symlink)。你改了../my-pkg/src/Helper.php,vendor/vendor/name/Helper.php仍是旧副本——这是最隐蔽的调试陷阱。
- 关键不在主项目配
"symlink": true,而在于**本地包自己的composer.json里是否声明了"options": {"symlink": true}** - Windows 用户需以管理员身份运行终端,否则 symlink 创建失败且无提示
- Docker 场景需加
--cap-add=SYS_ADMIN,且挂载方式要支持 symlink - 验证是否真用了 symlink:
ls -la vendor/vendor/name(Linux/macOS)或dir vendor\vendor\name(Windows),看到->或JUNCTION才是成功 - 改完本地代码后,必须运行
composer update vendor/name刷新链接;composer install不会重建已有链接
autoload 不生效,不是 Composer 没加载,而是映射没更新
path 仓库让包“存在”,但类能否被new或use,取决于 autoload 映射是否包含它的真实路径。即使本地包composer.json写了"psr-4": {"Acme": "src/"},主项目也不会自动继承。
- 修改本地包的
autoload配置后,必须手动执行composer dump-autoload -o(加-o生成优化版) - Xdebug 断点失效?检查 IDE 中设置的路径是否与真实磁盘路径完全一致(尤其注意 Windows 盘符大小写、反斜杠)
- CI/CD 环境下 symlink 必然失败,因为路径不存在——上线前必须移除
repositories中的 path 条目 - 团队协作时避免硬编码路径,可用环境变量或构建脚本动态切换,但
composer.json中仍需保留配置占位
最容易被忽略的是:本地包composer.json里漏掉"options": {"symlink": true},或者 Windows 下没开管理员权限——这两点会导致 symlink 静默 fallback 成 copy,现象就是“改了代码却没生效”,排查起来极耗时间。

















