Composer官方唯一推荐的升级方式是composer self-update,它通过原子化替换composer.phar实现自动签名校验、备份回退,不删文件、不影响项目配置;Windows需用PHP显式调用PHAR路径绕过权限锁;跨主版本(如v2→v3)须加--3等参数;升级后须验证composer --version及PATH一致性。

直接运行 composer self-update 就能更新自身
Composer 官方唯一推荐的升级方式就是 composer self-update,它不是重装,而是原子化替换当前的 composer.phar 文件:自动校验 GPG 签名、下载新版、备份旧版(默认保留一份)、失败时自动回退。你不需要删文件、不需重新安装、也不影响项目里的 composer.json 或依赖。
- 最常用场景:日常保持最新稳定小版本(如从
2.7.6升到2.7.7) - 默认只升同主版本下的最新补丁/次版本,不会自动跨到 v3 —— 即使 v3 已发布,
self-update仍停在 v2.x 最新版 - 执行前建议先看一眼当前版本:
composer --version,避免 CI 缓存误导判断
Windows 上 self-update 报错 Permission denied 怎么办
Windows 对正在运行的可执行文件加锁,导致 composer self-update 直接写入失败是常态,错误信息通常是 file_put_contents(): failed to open stream 或 Access is denied。
- 绕过方案:用 PHP 显式调用 PHAR 文件本身,例如:
php "C:\ProgramData\ComposerSetup\bin\composer.phar" self-update - 先查路径:
where composer或composer --version --no-ansi看输出里加载的是哪个.phar路径 - 如果
php命令未识别,就用绝对路径,比如:C:\php\php.exe "C:\path\to\composer.phar" self-update - 长期建议卸载 GUI 安装版,改用手工安装到用户目录(如
C:\Users\YourName\bin\),再配PATH,一劳永逸
想升 v3 或指定版本,必须显式加参数
v2 和 v3 不兼容,self-update 默认策略会拦住主版本跃迁。你得明确告诉它“我要换通道”或“我要这个具体版本”。
- 升到 v3 最新版(实验性,生产慎用):
composer self-update --3(注意是--3,不是--preview) - 锁定 v2 最新版(适合从预览版退回):
composer self-update --2 - 指定精确版本:
composer self-update 2.7.7或composer self-update 3.0.2 - 检查支持哪些通道:
composer self-update --list(部分旧版不支持该参数,需先升到 2.5+)
升级后验证和常见陷阱
命令返回 “Updated” 不代表真生效 —— Windows 可能缓存旧二进制,Linux/macOS 可能 PATH 中有多个 composer 冲突,v3 还会改变锁文件行为。
- 务必运行:
composer --version,重点看输出末尾的 commit hash 和日期,别只信版本号 - 检查是否多版本共存:
where composer(Win)或which -a composer(macOS/Linux),删掉旧路径或调整PATH顺序 - v3 首次运行
composer install可能报错:The lock file does not contain require-dev information,此时需删掉composer.lock重建 - 签名验证失败(
Signature mismatch)不要轻易加--no-sigcheck,优先检查系统时间是否准确、网络是否被中间人劫持










