项目内安装将依赖写入composer.json并存于vendor目录,仅限当前项目使用,适用于框架、ORM等必需库;2. 全局安装将包置于系统目录(如~/.composer/vendor),命令行工具可在任意位置调用,适合laravel/installer、php-CS-Fixer等开发工具;3. 项目依赖由composer.lock锁定,保障团队一致性,全局依赖无版本锁定,需手动维护;4. 全局命令需将~/.composer/vendor/bin加入PATH才能直接调用,项目内工具可通过php vendor/bin/command运行。

Composer 安装包时可以选择全局安装或项目内安装,两者主要区别在于作用范围、使用场景和管理方式。
作用范围不同
项目内安装:通过 composer require vendor/package 安装的包会被写入当前项目的 composer.json,依赖文件存放在项目根目录下的 vendor 文件夹中。这些依赖仅对该项目生效。
全局安装:使用 composer global require vendor/package 安装的包会放在系统特定目录(如 ~/.composer/vendor),其可执行文件通常链接到全局 bin 目录(如 ~/.composer/vendor/bin),可在任意位置运行。
使用场景不同
项目内安装适合开发项目所需的库,比如框架、工具类、数据库 ORM 等。这些是项目运行必须的依赖。
全局安装适合安装命令行工具,比如:
- Laravel 安装器(laravel/installer)
- PHP-CS-Fixer(代码格式化)
- PHPStan(静态分析)
这些工具不需要每个项目都单独安装,但需要在终端中随时调用。
依赖管理方式不同
项目内的依赖由项目的 composer.json 和 composer.lock 精确控制,便于团队协作和部署一致性。
全局依赖没有统一的锁定机制,版本可能因环境而异,不利于团队统一。升级和维护需手动管理。
PATH 配置影响可用性
全局安装后,若想直接在命令行使用相关命令,需确保 ~/.composer/vendor/bin 已加入系统 PATH 环境变量。否则需要输入完整路径才能执行。
项目内安装的可执行文件位于 vendor/bin,一般通过 php vendor/bin/command 调用,或借助 scripts 配置简化操作。
基本上就这些。项目内安装关注“项目依赖”,全局安装关注“开发工具”。根据用途选择合适的方式更利于维护。