composer install 是项目级操作,仅将依赖安装到 vendor/ 目录并生成 autoload.php,不修改系统 path;全局工具需手动配置 path 才能调用,且项目与全局同名工具可能因 path 顺序导致冲突。

composer install 是项目级操作,不碰系统PATH
它只负责把 composer.json 或 composer.lock 里声明的依赖,下载并解压到当前项目的 vendor/ 目录下,同时生成或更新 vendor/autoload.php。整个过程完全隔离在项目目录内,不会往系统任何路径写可执行文件,也不会修改 $PATH。
常见误解是“装完就能用命令”,比如装了 phpunit/phpunit 后直接敲 phpunit 报错——这不是 install 没跑完,而是它根本没打算让你这么用。
-
composer install不会把vendor/bin/phpunit加进系统$PATH - 它也不关心你有没有全局装过同名工具,两者互不感知
- 即使项目里
vendor/bin下有可执行文件,shell 也默认找不到,除非你显式调用./vendor/bin/phpunit(Linux/macOS)或vendor\bin\phpunit(Windows)
全局安装(composer global require)本质是“另起一套 vendor”
执行 composer global require laravel/installer,实际是把包装进了 Composer 自己维护的一个独立 vendor 目录:~/.composer/vendor/bin(Linux/macOS)或 %APPDATA%\Composer\vendor\bin(Windows)。这个目录和任何项目无关,但它的二进制文件必须手动加进系统 $PATH 才能被 shell 识别。
错误现象:命令行输入 laravel 提示 command not found,但 composer global list 能看到已安装——这说明安装成功,只是系统根本没去那个目录找。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:需在
~/.zshrc或~/.bashrc中追加export PATH="$HOME/.composer/vendor/bin:$PATH",再运行source ~/.zshrc - Windows:必须在「环境变量」中把
%APPDATA%\Composer\vendor\bin加入「用户变量」的PATH,且要新开终端窗口(关掉再开不算) - 验证方式:运行
echo $PATH或echo %PATH%看路径是否存在;再用which laravel或where laravel确认命中的位置
install 和 global require 混用时容易踩的坑
同一个工具既全局装了又项目里装了(比如 php-cs-fixer),不是“谁版本高谁生效”,而是取决于 $PATH 中哪个路径排在前面。如果全局路径在前,php-cs-fixer 就永远调不到项目里的版本,可能导致格式化行为不一致、CI 失败。
更隐蔽的问题是 autoload 冲突:全局安装的包如果被项目 autoloader 加载(比如通过 composer dump-autoload --optimize 时未排除),可能引发类重复定义或版本错乱。
- 项目内需要特定版本的 CLI 工具(如测试覆盖率报告生成器),应避免全局安装,改用
composer require --dev+composer scripts调用 - 全局只装真正“跨项目”的脚手架类工具(
laravel/installer、phpstan/phpstan),绝不装框架组件或运行时依赖 - CI 流水线里禁用
composer global,所有工具都走项目级require --dev,保证环境纯净可复现
什么时候该用 install,什么时候该用 global require
判断标准就一条:这个东西参不参与项目运行逻辑?
- 参与运行(比如
monolog/monolog、guzzlehttp/guzzle)→ 必须composer require进项目,由composer install驱动安装 - 纯开发辅助(比如
laravel/installer、php-cs-fixer、psy/psysh)→ 可全局安装,但前提是 PATH 配好、版本稳定、不与项目冲突 - 临时调试用的工具(比如某次想跑
doctrine/dbal的 schema 命令)→ 直接composer require --dev doctrine/dbal,然后./vendor/bin/doctrine,用完删掉,不污染全局
PATH 配错、全局和项目共存、误把运行时依赖当工具装——这三个点,覆盖了 90% 的 Composer 命令找不到问题。别猜,先查 echo $PATH 和 which xxx。










