mindplay/composer-locator

该软件包已被废弃且不再维护。作者建议使用 composer-runtime-api 软件包。

根据软件包名称定位软件包根目录

2.1.5 2024-05-08 09:26 UTC

This package is auto-updated.

Last update: 2024-05-08 09:27:44 UTC


README

⚠️ 已弃用:使用 Composer 运行时工具

此 Composer 插件提供了一种根据给定的 Composer 软件包名称查找安装路径的方法。

PHP Version CI

使用此方法查找供应商软件包根目录,例如在处理软件包中的模板文件或其他资源时,定位和发现插件等。

无论安装器如何影响单个软件包的安装路径,它都能正常工作,并且当所讨论的软件包目前是根软件包/项目或依赖项时也能正常工作。

使用方法

将其添加到您的 composer.json 文件中

{
    "require": {
        "mindplay/composer-locator": "^2"
    },
    "config": {
        "allow-plugins": {
            "mindplay/composer-locator": true
        }
    }
}

运行 composer installcomposer update 将使用包含 Composer 软件包安装路径注册表的生成类引导您的项目。

要获取指定软件包的安装路径

$path = ComposerLocator::getPath("vendor/package"); // => "/path/to/vendor/package" 

如果未找到指定的软件包名称,则函数会抛出 RuntimeException

要检查给定软件包是否已安装

$is_installed = ComposerLocator::isInstalled("vendor/package"); // => (bool) true|false 

根 Composer 项目软件包不一定有软件包名称 - 要获取根 Composer 项目的根路径,无需指定软件包名称

$path = ComposerLocator::getRootPath(); // => "/path/to/project/root" 

您还可以通过 ComposerLocator::getPackages() 获取所有已安装软件包的列表,或通过 ComposerLocator::getPaths() 获取软件包名称到绝对根路径的完整键/值映射。

为什么?

需要知道软件包安装目录的根路径是一个相当常见的需求,例如您需要指定模板文件或其他资源的路径时。

问题是,Composer 本身没有提供简单可靠的方法来完成这个任务。

您可以使用反射从软件包中获取已知类或接口的路径,然后从您的 src 文件夹使用 dirname() 向上到软件包安装根目录,但这种方法不是很稳健,因为类文件的定位可能会从一个版本到另一个版本发生变化。

即使您知道供应商根文件夹的路径,并且了解 {vendor}/{package} 文件夹名称约定,也不能保证软件包总是安装在那里 - 类似于 composer-installers 可能会影响安装路径。

此外,在开发库时,在测试和开发过程中,软件包将作为根/项目软件包安装,但当它作为另一个项目的依赖项安装时,此路径将不同。