“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”。这是混淆了作用域。