composer 2.2+ 已彻底移除 self-update 命令,升级须通过外部方式:windows 重装 composer-setup.php,macos/linux 用 brew 或手动下载二进制,ci/cd 中需指定版本并校验 sha384 哈希。

composer self-update 不再可用,这是 Composer 2.2+ 的硬性变更。官方移除了该命令,试图运行会直接报错 Command "self-update" is not defined. —— 不是权限或网络问题,是命令本身被删了。
为什么 self-update 被彻底移除
Composer 团队认为包管理器自身的升级不该由自身完成,存在安全与一致性风险(比如更新过程中依赖解析出错、二进制损坏后无法回滚)。从 2.2 开始,升级必须交由外部安装方式接管。
- Windows 用户靠
composer-setup.php重装覆盖 - macOS/Linux 用户优先走系统包管理器(如
brew upgrade composer)或手动下载二进制 - 所有平台都支持用
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"+ 验证哈希 + 安装流程
当前最稳的更新方式:用 curl + php 重装
跳过包管理器差异,直接获取最新稳定版二进制,适合 CI/CD 或多环境统一维护场景。注意校验步骤不能省,否则可能拉到中间人篡改包。
- 执行
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - 用
php -r "echo hash_file('sha384', 'composer-setup.php');"核对官网公布的 SHA384 值(页面右上角有) - 确认无误后运行
php composer-setup.php --install-dir=/usr/local/bin --filename=composer - 旧版本残留的
~/.composer目录不用动,配置和缓存自动继承
CI 环境里别写死版本,用 COMPOSER_VERSION 控制
GitHub Actions / GitLab CI 中硬编码 curl https://getcomposer.org/installer 会默认拿 latest,导致构建结果不可重现。必须显式指定版本号。
- 下载地址要带版本路径:例如
https://getcomposer.org/download/2.7.7/composer.phar - 环境变量方式更可靠:
COMPOSER_VERSION=2.7.7 curl -sS https://getcomposer.org/installer | php - 不验证哈希时,CI 日志里必须输出
php composer.phar --version结果用于审计 - Docker 构建中避免用
apt-get install composer—— Ubuntu 源里的版本通常滞后 6 个月以上
真正麻烦的不是“怎么升”,而是升级后 composer.json 里没锁 platform 配置导致本地 PHP 版本和 CI 不一致,进而引发 autoload 错误。这点比升级动作本身更容易漏掉。










