不能用了。从 Composer 2.5.0 起 self-update 命令被彻底移除,官方改用安装脚本重装方式更新 composer.phar,必须通过 php 执行官方脚本或 curl 下载并校验 SHA-384,手动覆盖存在安全风险。

composer self-update 命令是否还能用
不能直接用了。从 Composer 2.5.0 开始,composer self-update 命令被彻底移除,执行会报错:Command "self-update" is not defined. 这不是权限或网络问题,是官方主动废弃——Composer 团队转向由安装脚本统一管理二进制更新逻辑。
正确更新 composer.phar 的两种方式
当前(2024 年主流版本为 2.7.x)必须用官方提供的下载脚本重装,而不是“升级”。本质是覆盖旧文件,不是增量更新。
- 推荐方式:用
php执行官方安装脚本(兼容性最好)php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php --filename=composer --install-dir=/usr/local/bin/ php -r "unlink('composer-setup.php');" - 快捷方式(仅限已安装且有写权限的系统):
curl -sS https://getcomposer.org/installer | php -- --filename=composer --install-dir=/usr/local/bin/
注意:--install-dir必须指向你实际调用composer命令时所在的路径,比如 macOS Homebrew 用户可能是/opt/homebrew/bin/,Linux 普通用户常用/usr/local/bin/
为什么不能用 chmod +x 然后 ./composer 更新
composer.phar 是 PHP 归档文件,不是可执行二进制。即使加了 +x 权限,直接运行 ./composer 仍依赖系统默认的 php 解释器,且无法绕过签名验证与版本校验逻辑。更重要的是:官方不再提供带签名的增量补丁包,self-update 后端早已下线,强行模拟只会失败或降级到旧版。
- 常见误操作:
sudo chmod +x composer.phar && sudo mv composer.phar /usr/local/bin/composer—— 这只是复制文件,不校验哈希,可能引入损坏或中间人篡改风险 - 真正安全的流程必须包含 SHA-384 校验步骤,而官方脚本已内置该逻辑;手动下载
composer.phar直接覆盖,跳过校验,属于高危操作
检查更新是否生效及常见卡点
运行 composer --version 查看输出,确认版本号 ≥ 2.7.0。如果仍显示旧版或报错 command not found,优先排查以下三点:
-
which composer输出路径是否和你--install-dir指定的一致?多个 Composer 安装共存时容易混淆 - Shell 缓存未刷新:执行
hash -d composer(bash/zsh)或重启终端 - 权限问题:若用
sudo安装但当前用户无/usr/local/bin/写权限,后续更新会失败;建议普通用户改用--install-dir=$HOME/bin并确保该目录在$PATH中靠前
最常被忽略的是 PATH 加载顺序和缓存,比下载本身更容易导致“明明更新了却没生效”。










