apoca/merge-composer

多个 composer.json 文件的合并插件

安装: 11

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:composer-plugin

v2.0.6 2023-01-12 23:31 UTC

This package is auto-updated.

Last update: 2024-09-13 03:19:08 UTC


README

Latest Stable Version License Build Status Code Coverage

Composer 合并插件

Composer 运行时合并多个 composer.json 文件。

Composer 合并插件旨在使拥有 composer.json 文件并期望某些部署安装额外的 Composer 管理库的应用程序的依赖关系管理更加容易。它通过允许应用程序的顶级 composer.json 文件提供一组可选的附加配置文件来实现。当运行 Composer 时,它将解析这些文件并将它们的配置设置合并到基本配置中。然后,将使用此组合配置下载额外的库并生成自动加载器。

Composer 合并插件是为了帮助安装 MediaWiki 而创建的,MediaWiki 有核心库需求以及可能通过 Composer 管理的可选库和扩展。

安装

Composer 合并插件 1.4.x(及更早版本)需要 Composer 1.x。

Composer 合并插件 2.0.x(及更新版本)与 Composer 2.x 和 1.x 都兼容。

$ composer require wikimedia/composer-merge-plugin

从 Composer 1 升级到 2

如果您已经使用 Composer 合并插件 1.4(或更早版本),并且正在将其更新到 2.0(或更高版本),建议您首先使用 Composer 1 更新插件。

如果您使用 Composer 2 更新不兼容的插件,则插件将被忽略

“wikimedia/composer-merge-plugin” 插件被跳过,因为它需要一个插件 API 版本("^1.0"),这与您的 Composer 安装("2.0.0")不匹配。您可能需要运行 composer update 并使用 "--no-plugins" 选项。

因此,Composer 将不知道合并的依赖项,并将删除它们,需要您再次运行 composer update 以重新安装合并的依赖项。

用法

{
    "require": {
        "wikimedia/composer-merge-plugin": "dev-master"
    },
    "extra": {
        "merge-plugin": {
            "include": [
                "composer.local.json",
                "extensions/*/composer.json"
            ],
            "require": [
                "submodule/composer.json"
            ],
            "recurse": true,
            "replace": false,
            "ignore-duplicates": false,
            "merge-dev": true,
            "merge-extra": false,
            "merge-extra-deep": false,
            "merge-replace": true,
            "merge-scripts": false
        }
    }
}

更新子级 composer.json 文件

为了使 Composer 合并插件能够从您项目中更新的或新创建的子级 composer.json 文件安装依赖项,您需要运行以下命令

$ composer update

这将 指示 Composer 重新计算顶级 composer.json 文件的哈希值,从而触发 Composer 合并插件查找子级配置文件并更新您的依赖项。

插件配置

插件从 composer.json 的 extra 部分的 merge-plugin 部分读取其配置。需要一个 include 设置来告诉 Composer 合并插件要合并哪个文件。

include

设置 include 可以指定单个值或值数组。每个值都视为一个 PHP glob() 模式,它标识要合并到当前 Composer 执行的根包配置中的附加 composer.json 样式的配置文件。

以下配置文件的以下部分将被合并到 Composer 根包配置中,就像它们被直接包含在顶级 composer.json 文件中一样

需求

“需求”设置与“包含”相同,除非匹配失败至少一个文件,则会导致错误。

递归

默认情况下,合并插件是递归的;如果包含的文件有“merge-plugin”部分,它也将被处理。可以通过添加“"recurse": false”设置来禁用此功能。

替换

默认情况下,Composer的冲突解决引擎用于确定在多个文件指定同一包时应该安装哪个版本的包。可以提供“"replace": true”设置来更改到“最后指定版本获胜”的冲突解决策略。在此模式下,合并文件中找到的重复包声明将覆盖早期文件中做出的声明。文件按“include”设置中指定的顺序加载,以字母顺序处理通配符文件。

忽略重复项

默认情况下,Composer的冲突解决引擎用于确定在多个文件指定同一包时应该安装哪个版本的包。可以提供“"ignore-duplicates": true”设置来更改到“首先指定版本获胜”的冲突解决策略。在此模式下,合并文件中找到的重复包声明将被忽略,以早期文件中做出的声明为准。文件按“include”设置中指定的顺序加载,以字母顺序处理通配符文件。

注意:“"replace": true”和“"ignore-duplicates": true”模式是互斥的。如果两者都设置,则使用“"ignore-duplicates": true”。

合并开发

默认情况下,“autoload-dev”和“require-dev”部分的包含文件会被合并。一个“"merge-dev": false”设置将禁用此行为。

合并额外

一个“"merge-extra": true”设置可以合并包含文件的“extra”部分的全部内容。额外部分的正常合并模式是接受任何键的第一个版本(例如,主配置中的键胜过任何导入配置中找到的版本)。如果激活了“replace”模式(见上文替换),则此行为会改变,最后一个找到的键将获胜(例如,主配置中的键将被导入配置中的键替换)。如果指定了“"merge-extra-deep": true”,则类似于array_merge_recursive()合并部分,但是重复的字符串数组键会被替换而不是合并,而数字数组键会按常规合并。合并额外部分的有用性会根据使用的Composer插件及其由Composer处理的顺序而有所不同。

请注意,“merge-plugin”部分不包括在合并过程中,除非禁用了递归

合并替换

默认情况下,包含文件中的replace部分会被合并。设置"merge-replace": false将禁用此行为。

merge-scripts

设置"merge-scripts": true将启用合并包含文件中scripts部分的内容。脚本部分的正常合并模式是接受任何找到的键的第一个版本(例如,主配置中的键会覆盖任何导入配置中找到的版本)。如果replace模式处于活动状态(见上方说明),则此行为将改变,最后找到的键将获胜(例如,主配置中的键会被导入配置中的键替换)。

注意:通过合并配置添加的自定义命令在作为composer run-script my-cool-command调用时将正常工作,但无法使用正常的composer my-cool-command快捷方式。

运行测试

$ composer install
$ composer test

贡献

错误、功能请求和其他问题应报告给GitHub项目。我们通过GitHub上的Pull Requests接受代码和文档贡献。

  • 项目使用PSR-2编码规范。包含的测试配置使用PHP Code Sniffer来验证约定。
  • 鼓励进行测试。我们的测试覆盖率并不完美,但我们希望它变得更好而不是更差,因此请尽量在您的更改中包含测试。
  • 保持文档最新。确保README.md和其他相关文档与您的更改保持最新。
  • 每个特性一个Pull Request。尽量保持您的更改专注于解决单个问题。这将使我们可以更容易地审查更改,并使您更容易确保您已更新必要的测试和文档。

许可

Composer Merge插件遵循MIT许可证。有关更多详细信息,请参阅LICENSE文件。