应使用官方脚本安装composer:先通过homebrew安装php(≥7.4),验证php -v和which php路径正确,再执行curl -ss https://getcomposer.org/installer | php,将composer.phar移至/opt/homebrew/bin/composer(m1/m2)或/usr/local/bin/composer(intel),sudo chmod +x赋权,并配置阿里云镜像源与并发下载数。

Mac上装Composer别用Homebrew
Homebrew的composer包自2023年起已弃用,容易导致路径错乱、版本陈旧或权限失败。正确做法是先确保PHP可用,再用官方脚本安装。
先确认PHP:运行php -v,必须≥7.4;运行which php,应返回/opt/homebrew/bin/php(M1/M2)或/usr/local/bin/php(Intel),不能是系统自带的/usr/bin/php。如果which php为空,往~/.zshrc加export PATH="/opt/homebrew/bin:$PATH",再执行source ~/.zshrc。
接着执行:
curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /opt/homebrew/bin/composer sudo chmod +x /opt/homebrew/bin/composer
验证:composer --version有输出即成功。
全局镜像配置三要素缺一不可
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/这条命令极易静默失效——不报错,但实际仍走packagist.org。原因只有三个:
- 键名写成
repos.packagist(多一个s)→ 完全忽略 - 漏掉中间的
composer(这是type值,不是可选参数)→ fallback到官方源 - URL末尾没斜杠:
https://mirrors.aliyun.com/composer→ 拼出404路径
验证是否生效,必须运行:composer config -g repo.packagist,输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}或至少是完整URL字符串。空、null、或仍是https://repo.packagist.org,说明没写进去。
并发下载不调等于白配镜像
Composer 2.2+ 默认只并发3个连接,对国内带宽严重浪费。不调这个参数,换再快的镜像也卡在Downloading。
查当前值:composer config -g http-max-concurrent-downloads
设为10(推荐):composer config -g http-max-concurrent-downloads 10
注意:20太高,可能触发file_put_contents(/tmp/): failed to open stream错误;降到6或8再试即可。
该参数只对install有效,update因依赖解析逻辑仍部分串行。
宝塔/CI里镜像不生效?用户搞错了
全局配置写在~/.composer/config.json,但它只对当前用户生效。宝塔「一键部署」默认以www用户运行,CI脚本常以runner或root运行——你用sudo composer config -g写进了root配置,它们根本读不到。
查真实执行用户:whoami或看日志UID。
给www用户单独配:sudo -u www composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
更稳妥的是项目级配置:进项目根目录,运行composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g),它会自动合并进composer.json的repositories字段,不破坏已有私有源。
换源后仍卡在Resolving dependencies?那和镜像无关,是composer.json里约束太宽(比如"*")、require-dev太多,或开了xdebug。这时候删vendor和composer.lock也没用。











