drupol / composer-packages
Composer Packages 是一个 Composer 插件,用于获取项目内安装的包信息。
Requires
- php: >= 7.1.3
- composer-plugin-api: ^1 || ^2
- composer/composer: ^2.0.0
- twig/twig: ^2.12.1 || ^3.0
Requires (Dev)
- phpunit/phpunit: ^7.5.6 || ^8.5
README
Composer 包
描述
Composer Packages 是一个 Composer 插件,用于获取项目内安装的包信息。
这对于想要构建一个包发现系统的人来说非常有用,这样就不需要再遍历文件系统。
文档
此包提供
- 一种简单的方法来获取已安装包的信息,
- 一种简单的方法来检索具有特定类型的包,
- 一种简单的方法来找到包的安装目录,
- 一种简单的方法来获取任何包的版本,
- 一种简单的方法来获取任何包的依赖关系。
它是如何工作的?
在进行 composer update
或 composer 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
来测试您的代码。
贡献
请随意通过发送拉取请求来贡献。我们通常是一个非常响应的团队,我们将从开始到结束帮助您完成拉取请求。
由于某些原因,如果您无法贡献代码但愿意提供帮助,赞助是一种很好的、合理且安全的方式来向我们表示对我们在包上投入时间的感激之情。