答案是path未正确配置:composer命令跨目录不可用说明shell未在path中找到其可执行文件,需确认安装路径(如/opt/homebrew/bin/composer)、将composer自身路径及$composer_home/vendor/bin均加入~/.zshrc,并新开终端验证。

Composer 命令能跨目录执行,才是真配置成功;只在安装目录下能跑,说明 PATH 没生效。
composer 命令报 command not found 怎么办
这不是没装,而是 shell 找不到 composer 这个可执行文件。macOS 默认不把用户自定义路径加入 PATH,必须手动补上。
- 先确认
composer文件在哪:运行ls -l /usr/local/bin/composer或ls -l /opt/homebrew/bin/composer(M1/M2 推荐后者) - 如果文件存在但命令仍报错,90% 是
PATH没包含该目录 - 别只改
~/.bash_profile—— macOS 12+ 默认用 zsh,它读的是~/.zshrc或~/.zprofile,写错文件等于白配 - 验证是否生效:换到任意目录(比如
~/Sites/myapp),再运行composer --version;同时执行which composer,应输出/usr/local/bin/composer或/opt/homebrew/bin/composer,而非./composer
COMPOSER_HOME 和 vendor/bin 的 PATH 必须分开配
很多人以为配好 composer 命令就万事大吉,结果 laravel、phpunit 等全局命令还是找不到——因为它们不在 composer 本体路径里,而在 COMPOSER_HOME/vendor/bin 下。
-
COMPOSER_HOME必须设为绝对路径,例如/Users/yourname/.composer(不能写~/.composer或$HOME/.composer) - 设完后必须重启终端,否则旧 shell 进程不会重读环境变量
- 验证方式:运行
composer config --list --global,看 “Global configuration file” 路径是否匹配你设的COMPOSER_HOME - 真正要加进
PATH的是$COMPOSER_HOME/vendor/bin,不是composer自身所在目录 - 在
~/.zshrc末尾加这行:export PATH="$HOME/.composer/vendor/bin:$PATH"(若改过COMPOSER_HOME,请替换为对应路径)
M1/M2 Mac 的 PATH 配置容易漏掉 Homebrew 路径
Apple Silicon Mac 上,Homebrew 默认装在 /opt/homebrew,它的 bin 目录(含 php)不在系统默认 PATH 里。如果 php -v 都报错,composer 根本跑不起来。
- 先检查
which brew:应输出/opt/homebrew/bin/brew;如果是/usr/local/bin/brew,说明装的是 Intel 版,需卸载重装 - 确保 PHP 已通过 Homebrew 安装:
brew install php,然后确认which php返回/opt/homebrew/bin/php - 在
~/.zshrc中,把 Homebrew 的 bin 路径放在最前面:export PATH="/opt/homebrew/bin:$PATH" - 如果用了 Oh My Zsh,某些插件会覆盖
PATH,建议把所有export PATH=...行放在~/.zshrc最顶部
国内访问慢?镜像源必须设在系统级,不能只靠项目配置
即使 composer 命令能跑,install 或 require 卡住或报 Connection timed out,大概率是源没切对。项目级 composer.json 里的 repositories 设置,会被全局配置覆盖或忽略。
- 全局设置阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 验证是否生效:
composer config --list --global,搜repo.packagist看值是否更新 - 不要只在项目里改
composer.json—— 那只影响当前项目,且容易被--no-plugins或其他参数绕过 - 如果公司内网有私仓,建议用
composer config -g repositories.myorg composer https://my-internal-mirror.com,再设composer config -g repos.packagist false关闭官方源
最容易被忽略的点:PATH 改完必须新开终端,而不是 source ~/.zshrc 就完事——因为某些 shell 启动时只读一次 PATH,子进程继承父进程环境,source 不会刷新已存在的终端会话的搜索路径。直接关掉窗口再开一个,是最稳妥的验证方式。











