InstalledVersions 是 Composer 自动生成的工具类,用于运行时查询已安装包的版本、路径及依赖类型。通过 Composer\InstalledVersions::getVersion('package') 可获取指定包版本,如 laravel/framework 的 'v10.0.0';使用 isInstalled('package') 判断包是否存在,适用于可选依赖的功能动态加载;调用 getInstallPath('package') 获取包在 vendor 中的实际路径,便于安全读取资源文件;通过 isInstalled('package', false) 可区分生产与开发依赖,防止在生产环境误用测试工具。该类由 Composer 自动维护,确保依赖信息始终与 composer install/update 同步,广泛应用于兼容多版本的 PHP 扩展和框架插件中。

InstalledVersions 类是 Composer 自动生成的一个核心工具类,它在项目运行时提供关于已安装包的元数据信息。这个类主要用于查询当前环境中哪些 Composer 包被安装、它们的版本号、安装路径以及是否为开发依赖等。
获取已安装包的版本信息
你可以通过 InstalledVersions 获取某个包的具体版本,比如判断 laravel/framework 的当前版本:
- 用途示例: 在编写插件或扩展时,需要根据框架版本决定使用哪种 API。
- 调用方式: Composer\InstalledVersions::getVersion('laravel/framework') 返回类似 'v10.0.0' 的字符串。
检查包是否存在或是否已安装
在运行时动态加载功能时,可能需要确认某个可选依赖是否存在于当前环境。
- 典型场景: 一个库支持多种缓存驱动(Redis、Memcached),可通过 InstalledVersions 判断对应客户端包是否安装。
- 方法调用: Composer\InstalledVersions::isInstalled('php-redis/client') 返回布尔值。
获取包的安装源路径
该类可以返回某个包在 vendor 目录下的实际文件路径。
- 适用情况: 需要读取某个包内部资源文件(如配置模板、迁移文件)时,安全地获取其位置。
- 代码示例: Composer\InstalledVersions::getInstallPath('symfony/http-foundation') 返回如 vendor/symfony/http-foundation 的路径。
区分生产与开发依赖
可以判断某个包是否作为 require-dev 安装,这在构建工具或测试辅助类中很有用。
- 使用方式: Composer\InstalledVersions::isInstalled('phpunit/phpunit', false) 第二个参数设为 false 表示只在主依赖中查找。
- 意义: 避免在生产环境中误触发仅用于测试的功能。
基本上就这些。InstalledVersions 在运行时提供了对依赖状态的安全访问,特别适合构建灵活、兼容多版本的 PHP 库或框架扩展。它由 Composer 自动维护,无需手动更新,只要执行了 composer install 或 update 就能反映最新状态。









