composer的path仓库不支持自动更新本地依赖,因其被设计为“只读快照”,首次安装后通过硬链接或复制锁定内容,后续update默认跳过,须手动remove/require、删vendor+lock条目重install,或update--with-all-dependencies强制刷新。

Composer 的 path 仓库不支持自动更新本地依赖,必须手动触发重安装或强制刷新 —— 这是设计使然,不是配置错误。
为什么 path 仓库的依赖不会随本地代码变化而自动更新
Composer 把 path 类型仓库当作“只读快照”处理:首次安装时它会硬链接(Linux/macOS)或复制(Windows)目标目录内容到 vendor/,后续 composer update 默认跳过该包,除非显式指定或强制刷新。这是为了保证可重现性,避免本地文件意外改动破坏依赖一致性。
- 即使你改了本地包的
src/或composer.json,composer install也不会同步这些变更 -
composer update vendor/name对path包无效,除非加上--with-dependencies并确保版本约束匹配 - 硬链接行为在 Windows 上不可用,所以会退化为复制,但同样不会自动同步
强制重新安装 path 依赖的三种可靠方式
核心原则:让 Composer “忘记”已安装的路径映射,再重新解析和安装。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer remove vendor/name,再执行composer require vendor/name:dev-main(注意版本需与path仓库中composer.json的"minimum-stability"和分支别名匹配) - 删掉
vendor/vendor/name目录 + 清空composer.lock中对应条目 + 运行composer install(适合锁文件已偏离本地状态时) - 使用
composer update vendor/name --with-all-dependencies,前提是path仓库的composer.json中版本号(如"dev-main as 1.0.x-dev")与根项目require的约束一致
path 仓库配置常见陷阱
配置写错会导致 Composer 完全忽略本地路径,转而从 Packagist 下载远程包。
-
repositories必须放在根项目的composer.json顶层,不能嵌套在config或其他字段下 -
type值必须是"path"(小写),写成"Path"或"local"会静默失败 -
url必须是相对于根项目composer.json的**相对路径**,且不能以./开头(应写"url": "packages/my-package",而非"url": "./packages/my-package") - 本地包的
composer.json中"name"必须与根项目require的完全一致(包括大小写),否则会被当作不同包处理
开发时提升效率的小技巧
频繁调试 path 包时,靠反复 remove/require 太慢,可以临时切换策略:
- 把本地包的
vendor/加进 PHPinclude_path或用autoload-dev的psr-4映射直接加载源码,绕过 Composer 安装流程(仅限开发验证逻辑) - 在本地包中启用
"autoload": {"files": ["src/functions.php"]},并在根项目autoload-dev中引用,实现热加载 - 用
composer config --global repositories.packages '{"type":"path","url":"../packages/*"}'设置全局通配路径,省去每次在项目里重复配置
真正麻烦的不是怎么更新,而是忘记 path 仓库本质上是“单次绑定”机制 —— 它没有 watcher,也不监听文件系统变化。每次改完本地包,都得主动告诉 Composer:“这个包的内容已经不一样了”。










