Composer/PHP:如何检查 Composer 软件包是否已安装?

mae*_*mae 8 php composer-php

在我们的应用程序中使用 PHP 检查软件包(任何版本)是否已安装/存在的最干净的方法是什么?

基本上,在我们的应用程序中,我们想要调用具有以下签名的函数:

bool function hasComposerPackage(string $packageName)

这个函数必须包含什么,以便我们可以执行以下操作:

if (hasComposerPackage('phpunit/phpunit')) {
    echo 'PHPUnit is installed!';
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,这需要在没有任何命令行 exec 调用的情况下发生,并且不应在进程中自动加载任何不必要的文件。

Fat*_*XPC 12

Composer 2(2020 年 10 月)现在支持查找软件包安装状态!https://blog.packagist.com/composer-2-0-is-now-available/

有一个新类 Composer\InstalledVersions,它会在每个项目中自动加载并在运行时可用。它允许您检查您自己的项目运行时存在哪些包/版本。

以下用法示例来自已安装版本 - Runtime Composer 实用程序

\Composer\InstalledVersions::isInstalled('vendor/package'); // returns bool
Run Code Online (Sandbox Code Playgroud)

@user1132363 使用shell_exec()运行类似的东西composer show是唯一确定的方法(Composer低于2),但你似乎拒绝走这条路。我不知道你为什么拒绝,这就是解决你问题的方法。没有其他可靠的手段。使用class_exists也不可靠,因为包中的类名可能会发生变化。

也就是说,我认为这里有一个更大的问题你没有问:你实际上想解决什么问题?例如,为什么需要检查软件包是否已安装?

  • 我更新了我的答案以反映 Composer 2 现在直接支持这一点。 (2认同)