直接运行 composer require 可快速安装包并自动更新 composer.json 和 autoload;手动修改 composer.json 后需用 composer install(依赖 lock)或 composer update(更新依赖);常见问题包括 PHP 版本不匹配、autoload 未引入、镜像源配置及 autoload 映射未刷新。

直接运行 composer require 最快
想立刻装一个包,比如 monolog/monolog,不用改 composer.json 手动写,直接终端执行:
composer require monolog/monolog
Composer 会自动做三件事:下载包、写入 composer.json 的 require 字段、更新 vendor/autoload.php。默认安装稳定版(^2.0 这类语义化版本约束)。
- 加
--dev装到require-dev,比如phpunit/phpunit - 指定版本用
composer require monolog/monolog:^1.26,避免自动升到 v2 导致兼容问题 - 如果报
Root composer.json requires ... but it is not installable,大概率是 PHP 版本不匹配,检查包的composer.json里php约束
composer.json 手动写完再 install
适合团队协作或需要精确控制依赖树的场景。先在 composer.json 里补上:
"require": {
"guzzlehttp/guzzle": "^7.8"
}
然后运行:
composer install
注意:install 只按 composer.lock 安装,不会读 composer.json 新增项;要让新增生效,得用:
composer update guzzlehttp/guzzle
- 全量更新用
composer update,但容易连带升级其他包,引发意外 break - CI/CD 环境必须用
install(保证和本地 lock 一致),不能用require或update - 修改
composer.json后忘了删composer.lock?别删——它不是缓存,是依赖锁定核心文件
装不了?先看这三处常见卡点
报错不是网络问题就是约束冲突,优先查:
-
composer diagnose:检查配置、权限、PHP 扩展(如openssl、zlib缺失会连不上 packagist) -
composer show -p:列出所有已启用的 repo,确认没误配私有源导致跳过 packagist.org -
composer why-not vendor/package:version:比如composer why-not laravel/framework:10.0,直接告诉你哪个已有包挡着升级路
国内用户如果卡在 Downloading...,临时切镜像源比折腾代理更稳:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
autoload 自动加载没生效?检查命名空间和 PSR 规则
装完包,new \Monolog\Logger() 报 Class not found,不是 Composer 没装好,而是没引入自动加载器:
require __DIR__ . '/vendor/autoload.php';
这个语句必须在使用任何第三方类之前执行。常见疏漏点:
- 脚本入口(如
index.php)漏了这行,或者放在了new之后 - 包本身不走 PSR-4,比如有些老库用
files方式 autoload,得看它composer.json的autoload.files字段是否被正确载入 - CLI 脚本和 Web 入口路径不同,
__DIR__相对位置算错了,建议用绝对路径或dirname(__DIR__) . '/vendor/autoload.php'
autoload 映射一旦生成就不会热更新,改了 composer.json 的 autoload 段后,必须跑一次 composer dump-autoload。










