path仓库生效需同时满足:类型为path、路径存在且含合法composer.json、包名与require完全一致;修改本地代码不更新vendor是因symlink仅首次创建,需检查是否真走path模式及symlink是否生效。

composer.json 里 path 仓库怎么配才生效
path 仓库不是加了就能立刻用的,必须同时满足三个条件:仓库类型为 path、路径存在且含合法 composer.json、包名与本地项目 require 的完全一致(包括 vendor 名和小写规则)。
常见错误是路径写相对路径但没注意当前工作目录——composer install 总是在项目根目录执行,所以 "../my-package" 是相对于你的主项目根目录,不是 composer.json 文件所在目录。
- 路径支持通配符:
"../../packages/*",但匹配到的每个子目录都必须有独立composer.json - 如果本地包没打 tag,默认走
dev-main或dev-master,require 时得显式写"dev-main",否则 Composer 会去 Packagist 找稳定版 - Windows 下路径分隔符用
/或\都行,但推荐统一用/,避免转义问题
为什么改了本地包代码,vendor 里却没更新
因为 Composer 默认对 path 仓库启用 symlink(软链接),但只在首次 composer install 或 composer update 时创建;后续修改源码不会自动同步,这是预期行为,不是 bug。
真正要验证修改是否生效,直接进 vendor/your-vendor/your-package 看文件是否是符号链接,以及指向路径是否正确。不是链接?说明没走 path 模式,可能被其他仓库(如 Packagist)优先命中了。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 强制重装并确保走 path:运行
composer update your-vendor/your-package --prefer-source - 检查是否被锁定:
composer.lock里该包的"source"字段应为"type": "path",不是"type": "git" - IDE 缓存可能导致“改了没反应”,试试清缓存或重启语言服务(比如 PHPStan/Intelephense)
symlink 被禁用或失败的几个典型场景
Windows 上非管理员 CMD/PowerShell 默认禁止创建 symlink,Linux/macOS 则取决于文件系统和挂载选项(比如某些 NAS 或 Docker volume 不支持)。
Composer 本身不报错,而是悄悄 fallback 到 copy 模式——此时 vendor 里是副本,改本地包毫无影响,非常隐蔽。
- 查是否真用了 symlink:
ls -la vendor/your-vendor/your-package(macOS/Linux)或dir vendoryour-vendoryour-package(Windows,看是否有<SYMLINKD>) - Windows 启用 symlink:以管理员身份运行终端,或开启开发者模式(
Settings > Update & Security > For developers > Developer mode) - Docker 中跑 Composer:宿主机映射的 volume 若挂载为
cached或delegated,symlink 可能失效;建议开发时用 bind mount 并确认容器内/proc/sys/fs/protected_symlinks值为 0
require-dev 包也想用 path 模式调试怎么办
可以,但要注意:dev 依赖默认不参与 autoload,也不会触发 symlink 创建,除非你显式执行 composer install --with-all-dependencies 或 composer update --with-all-dependencies。
更稳妥的做法是把调试中的包从 require-dev 暂时移到 require,调完再移回去——毕竟 path 仓库本就是临时开发手段,不该长期留在生产依赖里。
-
composer show your-vendor/your-package能看到当前加载的是哪种 source(path / git / dist) - 如果包只在
require-dev里,又想让它 symlink,必须加--with-all-dependencies,否则 Composer 直接忽略它 - 别在 CI 环境用 path 仓库,CI 通常没对应路径,会直接报错退出
git pull,结果 debug 半天发现根本没跑最新逻辑。

















