私有源更新后vendor仍为旧代码,因Composer未刷新私有源元数据缓存(如~/.composer/cache/repo/https---your-private-repo.com/)及dist包缓存;需手动删除对应repo子目录、files中相关hash目录或vendor/composer/archives/,再执行composer update --no-cache --prefer-dist。

私有源更新后 vendor 里还是旧代码?缓存没清对地方
Composer 私有包源(比如 GitLab、自建 Satis 或 Private Packagist)更新后,composer update 仍拉取旧版本,不是网络或权限问题,而是 Composer 缓存了元数据和 dist 包,且默认不校验私有源的变更。它只比对 composer.lock 中记录的 hash,而这个 hash 可能早已过期。
必须手动删掉 repo 元数据缓存,否则 update 永远不感知私有源更新
私有源的 packages.json(即包列表元数据)被缓存在 ~/.composer/cache/repo/https---your-private-repo.com/ 或类似路径下。Composer 不会自动刷新它,哪怕你改了 Git tag 或发布了新版本。一旦这个目录存在,composer update 就直接读缓存,跳过 HTTP 请求。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确认你的私有源 URL:运行
composer config --list | grep repositories,找到repositories.0.url对应值(如https://gitlab.example.com/api/v4/groups/my-group/-/packages/composer) - 把 URL 转成缓存路径:将
https://替换为https---,所有/替换为-,末尾不加斜杠。例如https://gitlab.example.com→https---gitlab.example.com - 执行删除:
rm -rf $(composer config --global cache-dir)/repo/https---gitlab.example.com - Windows 用户注意:
$(composer config --global cache-dir)在 PowerShell 需加.Trim(),或直接用$env:APPDATA\Composer\Cache\repo\https---gitlab.example.com
dist 包缓存也要同步清理,尤其用了 --prefer-dist
如果你的私有包配置了 "dist": {"url": "...", "type": "zip"},那它的 ZIP 归档会被缓存在 ~/.composer/cache/files/{vendor}/{package}/{hash}/。即使元数据已更新,Composer 仍可能复用旧 ZIP(因为 hash 没变,但内容已被覆盖)。
- 查当前锁文件中该包的 hash:
grep -A5 '"monolog/monolog"' composer.lock | grep shasum(替换为你的vendor/package) - 定位并删缓存:
rm -rf ~/.composer/cache/files/monolog/monolog/abc1234(hash 来自上一步) - 或者偷懒全清(CI 场景适用):
rm -rf ~/.composer/cache/files/*,但别删repo/和vcs/外的其他子目录,否则影响公共包
脚本部署时最容易漏掉的两个点
在 CI/CD 或 Docker 构建中,光跑 composer clear-cache 是不够的——它不碰 repo/ 下的私有源目录,也不清理 vendor/composer/archives/ 里的已解压 dist 包。
- 务必组合执行:
composer clear-cache && rm -rf $(composer config --global cache-dir)/repo/https---your-private-repo.com && rm -rf vendor/composer/archives/ - 再跑
composer update --no-cache --prefer-dist:--no-cache 确保本次不读缓存,--prefer-dist 强制走 dist 流程(避免 fallback 到 slow VCS clone) - 检查是否生效:更新后看
vendor/{vendor}/{package}/里文件修改时间,或git log -1(如果包是 Git 仓库)

















