用 composer require 安装包需正确书写 vendor/name 格式包名(如 monolog/monolog),查 packagist 确认;指定版本用 ^6.4 等语法;开发依赖加 –dev;类找不到先运行 dump-autoload 并检查 autoload 配置及 vendor/composer/autoload_*.php 是否注册。

直接用 composer require 就行,但包名写错、版本冲突、autoload 没生效是高频翻车点。
怎么写对包名和版本号
Composer 不认“github 仓库名”或“中文描述”,只认 vendor/name 格式的包名(比如 monolog/monolog)。搜包必须去 Packagist 查准名字,别凭印象手敲。
- 不加版本号默认装最新稳定版:
composer require guzzlehttp/guzzle - 要指定版本就写在后面:
composer require symfony/console:^6.4(注意^和~的语义差异) - 开发依赖用
--dev:composer require phpunit/phpunit --dev,它会进require-dev而非require - 如果提示
Could not find package xxx,先确认拼写,再查 Packagist 是否已弃用或改名
为什么 require 后类还是找不到
常见原因是没触发 autoloader 重生成,或者用了错误的命名空间。Composer 默认只自动加载 psr-4 或 classmap 声明过的路径。
- 执行完
composer require后,确保项目根目录有vendor/autoload.php,并在入口文件里require它 - 如果包提供的是函数而非类(比如
ramsey/uuid的全局函数),得确认它是否声明了filesautoload 类型,否则函数不会自动载入 - 运行
composer dump-autoload强制刷新映射,尤其在手动改过composer.jsonautoload 配置后 - 检查
vendor/composer/autoload_psr4.php里有没有对应命名空间 —— 没有说明包没正确注册 autoload
本地开发包怎么引入(不用发布到 Packagist)
想边写边试自己的私有包,或临时改第三方包源码,path 仓库是最稳的方式,比 repositories + vcs 少踩坑。
- 在项目
composer.json里加一段:
"repositories": [ { "type": "path", "url": "../my-local-package" } ]
composer require my-vendor/my-package:dev-main(注意版本必须匹配目标包 composer.json 中的 version 或分支名)~/xxx 或绝对路径(windows 下也一样)composer update,直接跑就行 —— path 是符号链接,实时生效最常被忽略的是 autoload 声明是否完整,以及 composer.json 里 minimum-stability 设置导致 dev 分支装不上。真遇到 “明明装了却 class not found”,先看 vendor/composer/autoload_*.php 文件里有没有你的命名空间。