porsi / composer-merge-plugin

Composer 插件,用于合并多个 composer.json 文件。最初由 Bryan Davis (wikimedia.org) 构建,Matthijs Thoolen 做了一些小的补充

安装次数: 9

依赖者: 0

推荐者: 0

安全: 0

星星: 0

关注者: 1

分支: 160

类型:composer-plugin

v1.4.1 2017-04-25 02:31 UTC

This package is auto-updated.

Last update: 2024-09-29 05:28:36 UTC


README

Latest Stable Version License Build Status Code Coverage

Composer 合并插件

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

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

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

安装

Composer 合并插件需要 Composer 1.0.0 或更高版本。

$ composer require wikimedia/composer-merge-plugin

使用方法

{
    "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-scripts": false
        }
    }
}

更新子级 composer.json 文件

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

$ composer update --lock

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

插件配置

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

include

include 设置可以指定单个值或值数组。每个值都被视为一个 PHP glob() 模式,用于识别要合并到当前 Composer 执行的根包配置中的额外的 composer.json 风格配置文件。

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

require

设置 requireinclude 相同,除非模式匹配失败至少一个文件,则会导致错误。

recurse

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

replace

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

忽略重复项

默认情况下,Composer 的冲突解决引擎用于确定在多个文件指定了相同的软件包时应安装哪个版本的软件包。可以提供 "ignore-duplicates": true 设置来切换到“第一个指定的版本获胜”的冲突解决策略。在此模式下,合并文件中找到的重复软件包声明将被忽略,以优先考虑较早文件中做出的声明。文件按 include 设置指定的顺序加载,globbed 文件按字母顺序处理。

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

合并开发

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

合并额外内容

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

请注意,merge-plugin 部分不包括在合并过程中,但除非禁用递归(见上文),否则总是由插件处理。

合并脚本

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

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

运行测试

$ composer install
$ composer test

贡献

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

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

许可证

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