composer 的 path 仓库类型不支持自动更新,必须手动触发;需配置 "symlink": true 并以管理员权限运行终端,确保 vendor 中包为指向源码的符号链接或联机目录。

Composer 的 path 仓库类型不支持自动更新,必须手动触发
当你在 composer.json 中用 "type": "path" 声明本地包依赖(比如 "my/package": "*" -> "path": "../my-package"),Composer 不会像 Packagist 那样拉取新版本。它只做一次软链接或硬拷贝(取决于 install 时是否加 --no-dev 或是否启用 symlink),之后无论你改了源码还是提交了新 commit,composer update 都不会同步变更。
如何让 path 包随源码改动实时生效
核心思路是绕过 Composer 的缓存和安装逻辑,直接让 vendor 下的包指向最新源码。关键控制点有两个:是否启用符号链接、是否开启 auto-update 模式。
- 确保
composer.json中该包配置含"symlink": true(推荐),否则默认会复制文件,改源码无效 - 运行
composer install或composer update my/package后,检查vendor/my/package是否为指向../my-package的符号链接(Linux/macOS)或联机目录(Windows junction) - 若不是链接,说明
symlink未生效——常见原因是 Windows 上未以管理员权限运行终端,或 Composer 版本 - 开发中无需反复
update,只要源目录有变更,项目就能立刻读到,前提是 autoloader 没缓存(如使用composer dump-autoload -o后需重新 dump)
path 类型下 composer update 为什么没反应
因为 path 不是“版本化仓库”,Composer 不解析其 composer.json 中的 version 或 branch-alias,也不检查 Git 提交哈希。它只认路径存在与否 + 是否满足 require 的约束(如 "*" 或 "dev-main")。所以:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer update my/package实际只是验证路径可读、composer.json合法、依赖能解析,然后跳过任何“下载/切换版本”动作 - 如果你改了
../my-package/composer.json的version字段,不影响当前安装;只有删掉vendor/my/package再install才可能触发重链接 - 错误提示如
Could not find a matching version of package my/package通常是因为路径不存在,或子目录里压根没composer.json
替代方案:用 local-repo + git 实现真版本更新
如果确实需要类似 Packagist 的 update 行为(例如测试不同分支、CI 中切换 tag),path 就不合适了。应改用本地 Git 仓库 + 自定义仓库配置:
{
"repositories": [
{
"type": "vcs",
"url": "../my-package"
}
],
"require": {
"my/package": "dev-main"
}
}
这样 composer update 就会执行 git fetch 并按分支名解析最新 commit,但要求 ../my-package 是合法 Git 仓库且有对应分支。注意:每次改分支需 composer update my/package --with-dependencies,否则可能卡在旧 commit。
真正容易被忽略的是:即使启用了 symlink,PHP 的 OPcache 或某些 IDE 的类缓存仍可能让你误以为代码没更新。遇到“改了代码却没生效”,先试 php -d opcache.enable=0 your-script.php,再确认链接是否真实存在。










