drupol/composer-packages

Composer Packages 是一个 Composer 插件,用于获取项目内安装的包信息。

资助包维护!
drupol

安装次数: 194 501

依赖者: 2

建议者: 0

安全: 0

星标: 33

关注者: 3

分支: 2

开放问题: 0

类型:composer-plugin

2.0.0 2020-10-24 21:12 UTC

This package is auto-updated.

Last update: 2024-09-12 15:51:13 UTC


README

Latest Stable Version GitHub stars Total Downloads GitHub Workflow Status Scrutinizer code quality Type Coverage Code Coverage License Donate!

Composer 包

描述

Composer Packages 是一个 Composer 插件,用于获取项目内安装的包信息。

这对于想要构建一个包发现系统的人来说非常有用,这样就不需要再遍历文件系统。

文档

此包提供

  • 一种简单的方法来获取已安装包的信息,
  • 一种简单的方法来检索具有特定类型的包,
  • 一种简单的方法来找到包的安装目录,
  • 一种简单的方法来获取任何包的版本,
  • 一种简单的方法来获取任何包的依赖关系。

它是如何工作的?

在进行 composer updatecomposer install 操作时,插件将生成将被 Composer 自动加载系统自动加载的类。

这些类包含关于项目中已安装的包的静态信息。在这些静态数据中,还包括一些有用的方法。这些类中的方法数量取决于项目中的包数量。

这个包的想法受到了来自令人惊叹的 Marco Pivetta 的包 ocramius/package-versions 的启发。

需求

  • PHP 7.1.3

安装

composer require drupol/composer-packages --dev

用法

获取特定类型的包

<?php

declare(strict_types=1);

include './vendor/autoload.php';

use ComposerPackages\Types;

// Use your IDE auto completion to list all the available methods based on your installed packages.
$packages = Types::library();

foreach ($packages as $package) {
    $package->getName(); // $package is an instance of Composer\Package\PackageInterface
}

// You can also get an array
$packagesArray = iterator_to_array($packages);

获取一个包

<?php

declare(strict_types=1);

include './vendor/autoload.php';

use ComposerPackages\Packages;
use Composer\Package\PackageInterface;

// Use your IDE auto completion to list all the available methods based on your installed packages.
$package = Packages::symfonyProcess();

// Package is an instance of Composer\Package\PackageInterface then:
$package->getName(); // To get the name.

// Find all the packages where the name starts with the letter "c".
$finder = static function (PackageInterface $package) : bool {
    return 'c' === str_split($package->getName())[0];
};

foreach (Packages::find($finder) as $package) {
    // Do something here.
}

获取一个包的安装目录

<?php

declare(strict_types=1);

include './vendor/autoload.php';

use ComposerPackages\Directories;

// Use your IDE auto completion to list all the available methods based on your installed packages.
$directory = Directories::symfonyProcess();

获取一个包的版本

<?php

declare(strict_types=1);

include './vendor/autoload.php';

use ComposerPackages\Versions;

// Use your IDE auto completion to list all the available methods based on your installed packages.
$version = Versions::symfonyProcess();

获取一个包的依赖关系

<?php

declare(strict_types=1);

include './vendor/autoload.php';

use ComposerPackages\Dependencies;

// Use your IDE auto completion to list all the available methods based on your installed packages.
$dependencies = Dependencies::symfonyDependencyInjection();

foreach ($dependencies as $dependency) {
    echo $dependency; // $dependency is string, the package name.
}

// You can also get an array
$dependenciesArray = iterator_to_array($dependencies);

注意: 如果 composer 还未安装,使用此包时可能会遇到以下错误

In Types.php line […]:

  Attempted to load class "ArrayLoader" from namespace "Composer\Package\Loader".
  Did you forget a "use" statement for e.g. "…\ArrayLoader", "…\ArrayLoader" or "…\ArrayLoader"?

如果出现这种情况,您可以在项目中显式地要求 composer,以确保其可用

composer require composer/composer

获取一个包的版本

<?php

declare(strict_types=1);

include './vendor/autoload.php';

use ComposerPackages\Versions;

// Use your IDE auto completion to list all the available methods based on your installed packages.
$version = Versions::symfonyProcess();

代码质量和测试

每当库中引入更改时,Github 会运行测试和基准测试。

库使用 PHPUnit 编写了测试。

在每次提交之前,使用 GrumPHP 执行一些检查,运行 ./vendor/bin/grumphp run 来手动触发它们。

PHPInfection 用于确保您的代码得到适当的测试,运行 composer infection 来测试您的代码。

贡献

请随意通过发送拉取请求来贡献。我们通常是一个非常响应的团队,我们将从开始到结束帮助您完成拉取请求。

由于某些原因,如果您无法贡献代码但愿意提供帮助,赞助是一种很好的、合理且安全的方式来向我们表示对我们在包上投入时间的感激之情。

Github 上赞助我以及任何贡献者