composer update 不是简单更新,而是重算整棵依赖树,易引发隐性冲突、子依赖卡旧版、autoload 失效甚至 ci 静默崩溃;必须先运行 composer outdated 查新版本与安全风险,再按需精准更新。

直接跑 composer update 不是更新,是重算整棵依赖树——它大概率会触发隐性冲突、子依赖卡旧版、autoload 失效,甚至让 CI 脚本在上线后静默崩掉。
为什么 composer outdated 必须先于所有 update 操作
它不改任何文件,只告诉你哪些包有新版本、是否含主版本跃迁、有没有标 [security]。不看它就动手,等于蒙眼开车。
- 加
--direct:只扫composer.json里你亲手写的包,过滤掉symfony/polyfill这类噪音 - 加
--patch-only(Composer 2.5+):避开次版本风险,专注修复类漏洞或小 bug - 看到带
!的行(如laravel/framework 9.52 → 10.38 !),别急着敲命令,先composer why-not laravel/framework:10.*查谁在拦路
composer update 加什么参数才真正生效
不加参数的 composer update 只更新顶层包本身,子依赖仍卡在 composer.lock 里旧 SHA,运行时容易报 Class not found 或 Method not found。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 只升一个包 + 它声明的直系依赖:
composer update monolog/monolog --with-dependencies - 升一个包 + 所有间接依赖(推荐用于功能接入场景):
composer update guzzlehttp/guzzle --with-all-dependencies - 想升主版本(如 Laravel 9 → 10)?必须先手动改
composer.json里的约束,再执行 update,否则直接报错退出
升级后类找不到?90% 是 autoload 没刷新
不是包没装对,是自动加载映射没重建。尤其当你用了 "optimize-autoloader": true,旧缓存会顽固残留。
- 开发环境也建议加
-o:composer dump-autoload -o - 如果项目有自定义 PSR-4 命名空间,检查
composer.json的autoload段是否被升级脚本意外覆盖 - CI 中建议加
composer validate --strict预检composer.lock,避免孤儿包残留
镜像源换完还慢?配置没生效或缓存没清
换源不生效,90% 是配置落错位置、缓存未清,或项目级 repositories 配置屏蔽了全局设置。
- 确认生效:运行
composer config -g repos.packagist,输出应为https://mirrors.aliyun.com/composer/ - 验证请求路径:
composer install -vvv看日志里 URL 是否含aliyun;若出现Downloading https://packagist.org/...,说明 fallback 到官方源 - 项目根目录若有
composer.json含"repositories"字段,它会完全屏蔽全局镜像设置
最常被忽略的是:composer.lock 里某个包的 commit hash 太老(比如三年前),Renovate 或某些 CI 工具可能判定“升级后不兼容”而静默跳过,连 PR 都不会发——你得主动查 composer show vendor/package 看实际安装源和时间戳。










