composer global本身不是独立命令,必须带子命令(如require、update等)才能执行;直接输入会报错或显示帮助,这是composer的设计逻辑。

composer global require 本身不是命令,输完就报错是正常现象
直接敲 composer global 会显示帮助或报错,这不是你手误,而是 Composer 的设计逻辑——global 必须带子命令才有意义。有效子命令只有几个:require、update、remove(≥ 2.5)、exec(≥ 5.4)。其中,require 是唯一安装入口,其他操作都建立在它之上。
常见错误:以为 composer global 是个独立命令,反复尝试后放弃;或者误写成 composerglobal require(中间没空格),导致 bash 找不到命令。
-
composer global require laravel/installer✅ 正确 -
composer global❌ 报错或只输出 help -
composerglobal require laravel/installer❌ bash: composerglobal: command not found
装完 php-cs-fixer 却敲不出 php-cs-fixer?先查 PATH 是否生效
90% 的 “明明装了却用不了” 都卡在这一步:~/.composer/vendor/bin(Linux/macOS)或 %APPDATA%\Composer\vendor\bin(Windows)没进系统 PATH。Composer 只负责把可执行脚本软链接过去,不负责告诉 shell 去哪找它。
验证方法:
- macOS/Linux:运行
echo $PATH | grep composer,看输出里有没有/Users/xxx/.composer/vendor/bin - Windows:运行
echo %PATH%,搜索Composer\vendor\bin - 再试
which php-cs-fixer(macOS/Linux)或where php-cs-fixer(Windows),无输出即未生效
配 PATH 时注意:
- macOS 用户若用 zsh(默认),改
~/.zshrc;bash 用户改~/.bash_profile - Windows 添加路径时,必须填绝对路径,比如
C:\Users\Alice\AppData\Roaming\Composer\vendor\bin,不能写%APPDATA%\Composer\vendor\bin - 改完必须新开终端,旧窗口不会重载
PATH
composer global require 不认 --dev,也不区分环境
全局安装没有 require-dev 概念。--dev 参数会被完全忽略,加了等于没加。所有通过 global require 安装的包,都会放进同一个全局 vendor 目录,且其声明的 bin 脚本全部被链接到 vendor/bin/ 下。
这意味着:
- 你不能靠
--dev控制哪些工具只在开发时可用——全局就是全局,永远可用 - 多个项目共享同一份工具版本,比如全局装了
phpstan/phpstanv1.12,所有项目调用phpstan命令时都走这个版本 - 无法像本地项目那样用
composer.json的config.platform.php锁定 PHP 版本,全局命令走的是系统默认 PHP CLI
所以别试图用全局方式管理项目级依赖,它只适合 CLI 工具箱:比如 laravel、php-cs-fixer、psysh、deployer 这类你每天手动敲、跨项目通用的命令行程序。
权限出错、路径猜错、二进制名不对——三个高频坑点
权限问题最典型:用 sudo composer global require 导致 ~/.composer 归属 root,后续所有全局操作都会 Permission denied。修复只需一行:chown -R $USER ~/.composer(Linux/macOS)。
路径别靠猜,尤其当你设过 COMPOSER_HOME 环境变量:
- 查真实全局根目录:
composer config --global home - 查真实 bin 目录:
composer global config bin-dir --absolute - 确认某个命令是否真被生成:
ls ~/.composer/vendor/bin/ | grep php-cs-fixer(Linux/macOS)
最后注意:包名 ≠ 二进制名。例如 friendsofphp/php-cs-fixer 生成的是 php-cs-fixer,但 phpunit/phpunit 生成的是 phpunit,而 laravel/installer 生成的是 laravel。不确定时,直接 ls ~/.composer/vendor/bin/ 看文件名最稳。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











