jparkinson1991/composer-linker-plugin

启用将包文件链接/复制到自定义目录

安装: 34

依赖: 0

建议: 0

安全: 0

星标: 1

关注者: 2

分支: 0

开放问题: 1

类型:composer-plugin

3.1.3 2022-06-23 15:40 UTC

README

Packagist Version Packagist PHP Version Support Build & Test Coverage Status Packagist License

此插件通过符号链接或复制允许将包文件移动到标准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 元素。 filesoptions 元素都是可选的。空的 filesoptions 对象将被视为错误。如果不需要它们,请不要包含它们。

定义文件映射

可以从包目录中选择文件进行手动挑选以进行链接。如果复杂链接的 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文件