以编程方式获取已安装的作曲器模块的列表

时间:2018-12-09 20:27:22

标签: php composer-php

我正在寻找一种方法来获取应用程序中已安装的作曲家模块的列表。是否可以使用类似\Composer->getModules()的东西?我还想从composer.json文件中获取其他值,例如包的类型和事物。我要实现的目标是将composer包含在框架中,并使应用程序自动知道它们在那里而无需任何其他安装。

2 个答案:

答案 0 :(得分:0)

您可以使用一些迭代器来获取作曲家=ARRAYFORMULA({"";"days since";IFERROR(IF(V4:V*1<>0,DATEDIF(V4:V,TODAY(),"D"),))}) 软件包的列表。在项目的根目录(required所在的目录)中创建一个文件,然后添加以下代码片段。这将查找vendor目录或根目录中的所有composer.json文件(而不是vendor等其他目录中的文件):

src

输出与此类似:

function getComposerPackages() {
    $directoryIterator = new RecursiveDirectoryIterator('./');
    $regexIterator = new RegexIterator(
        new RecursiveIteratorIterator($directoryIterator),
        '~^.(.)(?:vendor\1.*)?composer\.json$~',
        RecursiveRegexIterator::GET_MATCH
    );

    $requiredModules = [];
    foreach ($regexIterator as $filePath) {
        $jsonContent = file_get_contents($filePath[0]);
        $jsonArray = json_decode($jsonContent, true);
        if (isset($jsonArray['require'])) {
            $requiredModules += $jsonArray['require'];
        }
    }

    return $requiredModules;
}

print_r(getComposerPackages());

答案 1 :(得分:0)

我最终改编了@revo的答案

function getComposerPackages() {
    $requiredModules = [];
    foreach( glob("vendor/*/*/composer.json") as $filePath ) {
        $jsonContent = file_get_contents($filePath);
        $jsonArray = json_decode($jsonContent, true);
        if (isset($jsonArray['require'])) {
            $requiredModules += $jsonArray['require'];
        }
    }
    return $requiredModules;
}

print_r(getComposerPackages());