根本原因是Composer默认复用缓存的dist包或Git快照,未触发重新下载或解析;使用path仓库时需确保配置生效、清除缓存(包括vcs和vendor下的symlink)、重生成autoload,并在CI/Docker中禁用path改用真实包。

为什么composer update不拉本地修改的包?
根本原因不是代码没改对,而是 Composer 默认复用已缓存的 dist 包或 Git clone 快照,压根没触发重新下载或重新解析。尤其当你用 path 仓库方式引用本地包(如 "repositories": [{"type": "path", "url": "../my-package"}]),却仍看到旧行为,大概率是缓存或配置没清理干净。
- 检查是否真在用
path模式:运行composer show vendor/package,输出里必须含source: path ../my-package,否则说明配置未生效 -
path仓库会被composer.json中的repositories字段覆盖,但若该字段是空对象{}或含其他类型源(如 packagist),Composer 会忽略整个repositories块——删掉它再试 - 确认本地包根目录下有
composer.json,且其name和version与主项目require中声明的一致;版本写"dev-main"时,本地包分支名必须是main(不是master)
composer clear-cache为什么没用?
composer clear-cache 只清 ~/.composer/cache/files/ 和部分 provider 索引,但 path 类型包的元数据快照、Git clone 缓存、甚至 vendor/ 下的 symlink 指向都可能残留旧状态。它不碰 vendor/,也不重读 repositories 配置。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 强制刷新本地包元数据:删掉
vendor/vendor/package目录(不是整个vendor),再跑composer update vendor/package --no-cache - 如果用了
path仓库,还必须删掉 Composer 的内部 Git cache:rm -rf ~/.composer/cache/vcs/*(Linux/macOS)或对应 Windows 路径 - 验证是否真重载:加
-vvv运行,日志里应出现Reading ./../my-package/composer.json,而不是Using version x.x.x from cache
本地包改了类但报 Class not found?
这不是 Composer 没装上,而是自动加载器没更新。Composer 安装 path 包时会创建 symlink,但 autoload 规则不会自动重建——尤其当本地包的 composer.json 里 autoload 字段被改过,或主项目没重新 dump。
- 先确认 symlink 是否指向正确路径:
ls -l vendor/vendor/package,输出应为../my-package,不是某个 dist zip 解压目录 - 立刻执行
composer dump-autoload -o,强制重生成vendor/autoload.php;若本地包用了psr-4映射,这步必不可少 - 如果本地包本身也依赖其他包(比如 require 了
guzzlehttp/guzzle),它的vendor/不会被主项目加载——要么把依赖提到主项目require,要么确保本地包已composer install过
CI 或 Docker 环境里本地包总失效?
CI 构建时通常没有本地文件系统路径可映射,path 仓库直接不可用;Docker 构建中若 COPY 顺序不对,也会导致路径引用错位。这类环境不能靠“本地改完就生效”,得换思路。
- CI 中禁用
path:在 CI 脚本开头加composer config --unset repositories,让构建走真实 dist 包 - Docker 构建时,把本地包 COPY 到镜像内固定路径,再用
path引用;避免用 host volume mount,因为构建阶段看不到宿主机路径 - 更稳妥的做法:开发期用
path,发布前用composer config --unset repositories+composer update --with-dependencies锁死真实版本,再提交composer.lock
repositories 或本地包 composer.json,都要用 composer show 和 -vvv 日志交叉验证,别信“应该生效了”。

















