composer如何更新composer.phar到最新版本_composer self-update教程【实战】

13次阅读

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

composer如何更新composer.phar到最新版本_composer self-update教程【实战】

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 composerbash/zsh)或重启终端
  • 权限问题:若用 sudo 安装但当前用户无 /usr/local/bin/ 写权限,后续更新会失败;建议普通用户改用 --install-dir=$HOME/bin 并确保该目录在 $PATH 中靠前

最常被忽略的是 PATH 加载顺序和缓存,比下载本身更容易导致“明明更新了却没生效”。

text=ZqhQzanResources