mindplay / composer-locator
根据软件包名称定位软件包根目录
Requires
- php: >= 7.4
- composer-plugin-api: ^1.0 || ^2.0
Requires (Dev)
- composer/composer: ^1.0 || ^2.0
- mindplay/testies: ^1.0
- symfony/filesystem: ^5 || ^6 || ^7
- symfony/process: ^5 || ^6 || ^7
This package is auto-updated.
Last update: 2024-05-08 09:27:44 UTC
README
⚠️ 已弃用:使用 Composer 运行时工具
此 Composer 插件提供了一种根据给定的 Composer 软件包名称查找安装路径的方法。
使用此方法查找供应商软件包根目录,例如在处理软件包中的模板文件或其他资源时,定位和发现插件等。
无论安装器如何影响单个软件包的安装路径,它都能正常工作,并且当所讨论的软件包目前是根软件包/项目或依赖项时也能正常工作。
使用方法
将其添加到您的 composer.json
文件中
{ "require": { "mindplay/composer-locator": "^2" }, "config": { "allow-plugins": { "mindplay/composer-locator": true } } }
运行 composer install
或 composer 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 可能会影响安装路径。
此外,在开发库时,在测试和开发过程中,软件包将作为根/项目软件包安装,但当它作为另一个项目的依赖项安装时,此路径将不同。