composer update --lock 不读镜像配置、不联网、不更新 dist.url 和哈希,仅重写 lock 文件元数据;镜像生效需靠 install 或 update 触发下载,且换镜像后必须清空 vendor 和 lock 文件。

composer update --lock 根本不读镜像配置
这个命令压根不联网,也不查 packagist 或任何镜像源。它只读 composer.json 和本地 vendor/ 目录,重写 composer.lock 的元数据字段(比如 content-hash、platform、platform-check)。镜像地址存在 composer config --global repo.packagist 里,但 --lock 完全无视它。
常见错误现象:
你刚执行 composer config --global repo.packagist https://mirrors.aliyun.com/composer/,接着跑 composer update --lock,发现 composer.lock 里所有包的 dist.url 还是原始 GitHub 或 GitLab 地址——这不是 bug,是设计如此。
实操建议:
• 镜像切换后,别指望 --lock 帮你“同步”或“适配”镜像
• 如果你改了 composer.json 里的 php 版本或 config.platform.php,--lock 会更新 lock 中对应字段,但 dist URL 和 SHA256 不动
• 想让 lock 文件里记录的 dist URL 走镜像?不可能。那是 composer install 或 composer update 在下载时做的事,和 --lock 无关
镜像失效时 --lock 不报错,但 install 会失败
composer update --lock 不校验 composer.lock 里任何包的 dist.url 是否可达。哪怕你锁了一个私有 GitLab 包,而当前镜像根本没代理该域名,--lock 依然安静输出 Writing lock file,仿佛一切正常。
真正暴露问题的是后续的 composer install:它会按 lock 文件里硬编码的 dist.url 去请求,结果卡在 Cloning into '' 或直接报 401 Unauthorized。
实操建议:
• 不要靠 --lock 来验证镜像是否生效
• 私有包或自定义源出问题,优先检查项目根目录的 auth.json 是否配置正确,而不是怀疑 lock 文件
• CI 脚本中,应在 composer install 前加一步 curl -I https://your-mirror-domain 或 composer config --list | grep repositories 确认镜像 URL 正确
换镜像后必须清空 vendor,--lock 无法修复混用状态
如果你在保留旧 vendor/ 的前提下切换镜像,再跑 composer update --lock,lock 文件看似更新了,但 vendor/autoload.php 仍指向旧路径,符号链接可能 dangling,classmap 缓存也未刷新。此时 composer install 可能成功,但运行时类加载失败或扩展找不到。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
原因在于:--lock 不触碰 vendor/,也不重建 autoloader —— 它连 autoload 相关字段都不重算。
实操建议:
• 镜像变更后,必须执行 rm -rf vendor composer.lock,再 composer install
• Docker 构建中禁止 COPY 已存在的 vendor/;多阶段构建时,builder 阶段用完整镜像源,final 阶段只 COPY 代码 + vendor/
• composer update --lock 后如果没提交 composer.lock,CI 里就等于拿一个临时快照当权威,极危险
想让 lock 文件反映镜像行为?只能靠 update 或 install
唯一能让 composer.lock 里 dist.url 和 dist.sha256 与当前镜像实际拉取结果对齐的操作,是触发真实下载:要么 composer update(全量),要么 composer install(基于 lock)。前者会重算依赖树并走镜像下载,后者则严格按 lock 执行,但前提是镜像能代理所有 dist URL。
注意:composer update --lock-only(Composer 2.2+)和 --lock 不同,它会重新解析约束并刷新所有包的版本和哈希,但仍不下载 —— 它也不走镜像,只是逻辑重算。
实操建议:
• 别用 --lock 当“镜像同步开关”
• 真正需要 lock 与镜像行为一致,就跑一次 composer install(确保镜像已生效)
• 如果 composer install 报 Lock file is not up to date,先 git status 看是不是 composer.json 被改了但 composer.lock 没提交,而不是急着换镜像










