jparkinson1991 / composer-linker-plugin
启用将包文件链接/复制到自定义目录
Requires
- php: ^7.3 || ^8.0
- composer-plugin-api: ^2.0
- symfony/filesystem: >=3.0
Requires (Dev)
- ext-uopz: *
- codedungeon/phpunit-result-printer: ^0.32.0
- composer/composer: ^2.3.5
- composer/package-versions-deprecated: ^1.11.99.3
- jparkinson1991/phpcodesniffer-standards: ^1.3
- php-coveralls/php-coveralls: ^2.2
- phpcompatibility/php-compatibility: dev-develop
- phpunit/phpunit: ^9.1
- roave/security-advisories: dev-latest
- rregeer/phpunit-coverage-check: ^0.3.1
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^4.8
README
此插件通过符号链接或复制允许将包文件移动到标准composer vendor目录之外。
此插件允许以下操作:
- 将整个包目录链接到自定义安装文件夹
- 将包内的特定文件链接到自定义安装文件夹
- 链接的文件可以根据需要重命名
在安装或更新时,根据配置将包(或其特定文件)链接,在卸载时取消链接。
任何链接的包将仍然存在于composer vendor目录以及任何配置的自定义安装路径中。
入门
要求
- 基于composer的PHP项目。
- Composer
^2
- PHP
^7.3 || ^8.0
Composer 2.3.0弃用
此插件知道地消耗了composer核心中的弃用功能,以确保其与所有当前版本的composer 2.x兼容。更新到最新版本的composer以确保当此弃用代码从插件中删除时,您的安装不会受到影响。
安装
$ composer require jparkinson1991/composer-linker-plugin
使用
作为插件使用
此插件将在包被安装、更新或卸载后自动调用。要让该包由此插件处理,只需提供其配置即可。包将在安装和更新时根据配置进行链接
。在卸载时,包将根据配置进行取消链接
。
当此插件安装和卸载时,将处理所有定义的配置。在安装时,所有配置都将被链接
。在卸载时,所有配置都将被取消链接
。
通过命令使用
可以使用命令手动触发链接
/取消链接
。命令只能处理在配置中存在的项目。
链接命令
按配置链接所有包。
$ composer composer-linker-plugin:link
$ composer clp-link
从配置中链接单个包。包必须已安装,且必须存在配置。
$ composer composer-linker-plugin:link package/name
$ composer clp-link package/name
从配置中链接多个包。包必须已安装,且必须存在配置。
$ composer composer-linker-plugin:link package/name second/package third/package ...
$ composer clp-link package/name second/package third/package ...
取消链接命令
按配置取消链接所有包。
$ composer composer-linker-plugin:unlink
$ composer clp-unlink
从配置中取消链接单个包。包必须已安装,且必须存在配置。
$ composer composer-linker-plugin:unlink package/name
$ composer clp-unlink package/name
从配置中取消链接多个包。包必须已安装,且必须存在配置。
$ composer composer-linker-plugin:unlink package/name second/package third/package ...
$ composer clp-unlink package/name second/package third/package ...
配置
所有插件配置都存在于项目composer.json
文件的extra
部分下的linker-plugin
键中。
简单链接
在最简单的形式中,此插件可以将包目录链接到指定的安装路径。
{
"extra": {
"linker-plugin": {
"links": {
"vendor/package": "custom/install/dir"
}
}
}
}
相对自定义安装目录将从项目根目录解析。例如,包含 composer.json 文件的目录。绝对路径将按原样处理。
复杂链接
为了更细粒度地控制链接,可以使用以下结构的对象来定义复杂链接对象。
{
"extra": {
"linker-plugin": {
"links": {
"vendor/package": {
"dir": "custom/install/dir",
"files": ...,
"options": ...
}
}
}
}
}
在定义复杂链接对象时,需要 dir
元素。 files
和 options
元素都是可选的。空的 files
或 options
对象将被视为错误。如果不需要它们,请不要包含它们。
定义文件映射
可以从包目录中选择文件进行手动挑选以进行链接。如果复杂链接的 files
元素存在,则 仅链接这些文件。
在定义文件映射时
源文件
始终被视为相对于包的安装目录。文件目标
- 如果为相对路径,则从链接的自定义安装目录解析。
- 如果为绝对路径,则按原样处理。
重要:同一个源文件可以映射到多个目标,但是每个目标在链接定义中必须是唯一的。
文件映射既可以定义为对象,也可以定义为数组。
将文件映射定义为数组
{
"extra": {
"linker-plugin": {
"links": {
"vendor/package": {
"dir": "custom/install/dir",
"files": [
"PackageFile1.php",
{
"PackageFile2.php": "includes/PackageFile2.php",
"PackageFile3.php": {
"PackageFile3-Dest1.php",
"PackageFile3-Dest2.php"
}
}
]
}
}
}
}
}
当使用数组定义文件映射时
- 扁平字符串(
PackageFile1.php
)- 将被视为具有源和目标
- 键值对(
PackageFile2.php
)- 键将被视为源文件
- 值将被视为目标
- 键到多值对象(
PackageFile3.php
)- 键将被视为源文件
- 对象中的每个值将被视为该源文件的单独目标。
将文件映射定义为对象
{
"extra": {
"linker-plugin": {
"links": {
"vendor/package": {
"dir": "custom/install/dir",
"files": {
"PackageFile1.php": "includes/PackageFile1.php",
"PackageFile2.php": {
"PackageFile2-Dest1.php",
"PackageFile2-Dest2.php"
}
}
}
}
}
}
}
当将文件映射定义为对象时,所有映射必须定义一个 source file
。
- 键值对(
PackageFile1.php
)- 键将被视为源文件
- 值将被视为目标
- 键到多值对象(
PackageFile2.php
)- 键将被视为源文件
- 对象中的每个值将被视为源文件的单独目标。
定义链接级别选项
要定义链接级别选项,请在一个复杂链接配置中包含 options
对象。
{
"extra": {
"linker-plugin": {
"links": {
"vendor/package": {
"dir": "custom/install/dir",
"options": {}
}
}
}
}
}
任何 插件选项 都可以放置在复杂链接配置的 options
对象中。
链接级别选项将覆盖插件设置的任何全局选项。
选项
插件级别选项可以在 options
对象中定义。
options
对象是可选的,如果未包含,则使用 默认隐含选项。
{
"extra": {
"linker-plugin": {
"links": {},
"options": {}
}
}
}
任何定义的插件选项都将应用于所有链接配置,除非 被覆盖。
复制文件
要启用链接时文件的复制,请使用布尔值定义 copy
选项。
{
"extra": {
"linker-plugin": {
"links": {},
"options": {
"copy": true
}
}
}
}
删除孤儿目录
如果要将包或其文件链接到项目的嵌套目录中,则在关联的包被卸载时,插件删除链接的孤儿目录可能很有用。
目录只有在为空时才会被视为孤儿。
孤儿目录 不会 在 composer 项目的根目录之外被清理。
例如
- 项目根目录:
/var/www/composer-project
- 链接目录:
/var/www/composer-project/nested/link/directory
- 卸载后的孤儿目录
/var/www/composer-project/nested/link
/var/www/composer-project/nested
要启用卸载关联包后删除链接配置的孤儿目录,请使用布尔值定义 delete-orphans
选项。
{
"extra": {
"linker-plugin": {
"links": {},
"options": {
"delete-orphans": true
}
}
}
}
默认隐含选项
默认隐含选项如下
{
"extra": {
"linker-plugin": {
"links": {},
"options": {
"copy": false
"delete-orphans": false
}
}
}
}
版本控制
使用SemVer进行版本控制。有关可用的版本,请参阅此存储库的标签。
许可证
本项目采用GNU GPLv3许可证授权 - 详细信息请参阅LICENSE文件