“Package is not installed”通常因vendor目录缺失、autoload未注册或作用域混淆导致:先确认vendor下包是否存在,再检查composer.json的require配置、composer show输出及autoload_psr4.php注册情况,排除global安装误用和platform/replace干扰。

Composer install 后 vendor 目录里确实没包
这不是提示“Package is not installed”最常见的情况,而是根本性失败:执行了 composer install 或 composer require,但 vendor/ 下对应目录就是不存在。先确认这点——别被提示误导成“已装但未识别”。
- 检查
composer.json中该包是否写在require(非require-dev)里,且版本约束语法正确(比如误写成"monolog/monolog": "dev-main"但仓库没启用minimum-stability) - 运行
composer show看输出里有没有该包名;没有就说明压根没进安装流程 - 留意终端最后一行是否出现
Nothing to install or update——这通常意味着 Composer 认为你已经满足依赖,但其实是因为composer.lock锁定了旧状态,而你改了composer.json却没删 lock 文件
Package is not installed 错误来自 composer dump-autoload 或运行时
这个提示更常出现在执行 composer dump-autoload、或框架启动自动加载类时抛出的异常(如 Laravel 的 Class not found 伴随 “Package is not installed”)。它不是 Composer 安装失败,而是自动加载器找不到该包的 PSR-4 映射。
- 进入
vendor/composer/autoload_psr4.php,搜索包名,看对应命名空间路径是否存在且拼写一致(注意大小写,Linux 下敏感) - 检查该包的
composer.json是否定义了autoload字段,比如漏了"psr-4": {"Foo\\": "src/"},或者"src/"路径实际不存在 - 如果包是通过
path仓库本地加载的,确认repositories配置中url指向的是含composer.json的**包根目录**,不是上层文件夹
用了 composer global 却在项目里找包
很多人把工具类包(如 laravel/installer)用 composer global require 装了,然后在某个项目里运行 php artisan 或其他命令,结果报 “Package is not installed”。这是混淆了作用域。
-
composer global安装到~/.composer/vendor/,只影响全局命令行工具,不参与任何项目的vendor/autoload.php - 项目内要用的包,必须在项目根目录下运行
composer require xxx,哪怕内容一样 - 验证方式:在项目目录执行
composer show xxx;如果提示 “Package xxx is not installed”,说明它不在当前项目 vendor 里
某些包被跳过安装(platform 或 replace 干扰)
当项目 composer.json 中配置了 "platform" 或依赖链里有 "replace",Composer 可能直接跳过安装某个包,同时也不报错,只在 composer install -v 输出末尾提一句 “Skipped installation of package xxx”。
- 加
-v参数重跑安装:composer install -v,滚动日志里搜Skipped或包名 - 检查是否有
"platform": {"ext-xxx": "1.0"}与目标包冲突(比如包声明依赖ext-gd,但你用 platform 声明了它已存在,Composer 就不再装含 gd 绑定的包) - 查看
composer.lock里该包是否出现在packages列表中;如果只在packages-dev或压根没出现,就得回溯依赖图
真正卡住的时候,往往不是某一步错了,而是多个条件叠加:比如本地 path 包 autoload 配置不对 + composer.lock 没更新 + 你又在用 global 命令查状态。优先盯死 vendor/ 目录是否存在、autoload_psr4.php 是否注册、以及 composer show 的输出是否匹配预期——这三个地方对得上,90% 的 “not installed” 就能定位清楚。










