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

不行,零基础学不会——这不是 Composer 的入门功能,而是专为“已知自己在改哪个包、且需要它和主项目实时联动”的开发者设计的调试机制。 它不解决“怎么装包”,只解决“怎么让本地改的代码立刻生效”。配置错一个字符、少一个引号、路径多一个斜杠,composer install 就静默跳过,连错误都不报。
为什么 composer require vendor/name:dev-main 一直报 “Could not find package”
根本不是网络问题,是 Composer 根本没“看见”你的本地目录。它只从主项目根目录的 composer.json 里读 repositories 字段,其他地方写的全无效。
-
repositories必须写在主项目composer.json的最外层,不能塞进require、config或其他字段里 -
url必须指向一个**含composer.json的目录**,不是文件本身,也不能以/结尾("../my-pkg/"会失效) - 本地包目录下的
composer.json必须有合法name字段,且与require中写的**逐字一致**:大小写、短横线-、vendor 名全部对齐("acme/utils"≠"Acme/utils") - 版本必须用
dev-main这类分支名,不能写1.0.0或*;本地包目录下还得有 Git 仓库(至少git init && git add . && git commit -m "init")
为什么 vendor/vendor/name 里代码没更新
你改了本地源码,但 vendor/ 里还是旧文件——大概率是因为 symlink 没真正建起来,Composer 静默 fallback 到了复制(copy)模式。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 默认行为在 Linux/macOS 是链接,在 Windows 是复制;想强制链接,必须在 **本地包自己的
composer.json里** 加"options": {"symlink": true}(不是主项目的) - Windows 用户必须以管理员身份运行终端,否则
symlink创建失败且无提示 -
composer install不刷新已有链接,改完本地代码后必须运行composer update vendor/name - 验证是否真链接成功:
ls -la vendor/vendor/name(Linux/macOS)或dir vendor\vendor\name(Windows),看到->或JUNCTION才算对
CI/CD 和 Docker 里为什么总失败
因为 path 仓库本质是“开发期快捷方式”,上线环境根本不该存在。
- CI 构建机没有你的
../my-pkg路径,composer install会直接报错或跳过 - Docker 容器内挂载宿主机目录时,常因权限丢失 symlink 能力,需加
--cap-add=SYS_ADMIN并确认挂载方式支持符号链接 - 上线前必须删掉主项目
composer.json里的repositories条目,改用真实远程源或 artifact 包 - 如果必须保留,至少把
"options": {"symlink": false}显式加上,避免构建阶段卡死
最常被忽略的一点:autoload 不生效,往往不是 Composer 没加载包,而是类映射没覆盖到你改的真实路径。即使 symlink 成功,也得手动跑一次 composer dump-autoload -o,否则 new \Vendor\Class 仍会报错。










