visiosoft / composer-merge-plugin
Composer插件,用于合并多个composer.json文件
Requires
- php: >=7.2.0
- composer-plugin-api: ^1.1||^2.0
Requires (Dev)
- ext-json: *
- composer/composer: ^1.1||^2.0
- mediawiki/mediawiki-phan-config: 0.10.6
- php-parallel-lint/php-parallel-lint: ~1.3.1
- phpunit/phpunit: ^8.5||^9.0
- squizlabs/php_codesniffer: ~3.6.1
README
Composer Merge Plugin
在Composer运行时合并多个composer.json文件。
Composer Merge Plugin旨在简化需要通过Composer安装额外库的应用程序的依赖关系管理。它通过允许应用程序的最高级别composer.json
文件提供可选的附加配置文件列表来实现这一点。当运行Composer时,它将解析这些文件并将它们的配置设置合并到基本配置中。然后,将使用此组合配置下载额外的库和生成自动加载器。
Composer Merge Plugin是为了帮助安装MediaWiki而创建的,MediaWiki具有核心库要求以及可能通过Composer管理的可选库和扩展。
安装
Composer Merge Plugin 1.4.x(及更早版本)需要Composer 1.x。
Composer Merge Plugin 2.0.x(及更高版本)与Composer 2.x和1.x都兼容。
$ composer require wikimedia/composer-merge-plugin
从Composer 1升级到2
如果您已经在使用Composer Merge Plugin 1.4(或更早版本),并且您正在将插件更新到2.0(或更高版本),建议您首先使用Composer 1更新插件。
如果您使用Composer 2更新不兼容的插件,则该插件将被忽略
由于“wikimedia/composer-merge-plugin”插件需要与您的Composer安装不匹配的插件API版本("^1.0"),因此跳过了该插件。您可能需要使用“--no-plugins”选项运行composer update。
因此,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-scripts": false } } }
更新子级composer.json
文件
要使Composer Merge Plugin能够安装您项目中更新或新创建的子级composer.json
文件中的依赖项,您需要运行以下命令
$ composer update
这将指示Composer重新计算顶级composer.json
文件的哈希值,从而触发Composer Merge Plugin查找子级配置文件并更新您的依赖项。
插件配置
插件从您的composer.json的extra
部分的merge-plugin
部分读取其配置。需要include
设置来告诉Composer Merge Plugin要合并哪些文件。
include
include
设置可以指定单个值或值数组。每个值都被视为PHP glob()
模式,用于标识要合并到当前Composer执行根包配置中的额外composer.json样式配置文件。
以下配置文件的以下部分将被合并到Composer根包配置中,就好像它们被直接包含在顶级composer.json文件中一样
- autoload
- autoload-dev(可选,请参阅下文merge-dev)
- conflict
- provide
- replace
- repositories
- require
- require-dev(可选,请参阅下文merge-dev)
- suggest
- extra(可选,见下文merge-extra)
- scripts(可选,见下文merge-scripts)
require
设置项 require
与 include
类似,但当模式无法匹配至少一个文件时,将引发错误。
递归
默认情况下,合并插件是递归的;如果一个包含的文件有一个 merge-plugin
部分,它也将被处理。可以通过添加设置 "recurse": false
来禁用此功能。
replace
默认情况下,Composer 的冲突解决引擎用于确定在多个文件指定相同软件包时应该安装哪个版本。可以通过提供设置 "replace": true
来更改到“最后指定版本获胜”的冲突解决策略。在此模式下,合并文件中找到的重复软件包声明将覆盖早期文件中做出的声明。文件按 include
设置中指定的顺序加载,以字母顺序处理 globbed 文件。
ignore-duplicates
默认情况下,Composer 的冲突解决引擎用于确定在多个文件指定相同软件包时应安装哪个版本。可以通过提供设置 "ignore-duplicates": true
来更改到“首先指定版本获胜”的冲突解决策略。在此模式下,合并文件中找到的重复软件包声明将被忽略,以优先考虑早期文件中做出的声明。文件按 include
设置中指定的顺序加载,以字母顺序处理 globbed 文件。
注意:"replace": true
和 "ignore-duplicates": true
模式是互斥的。如果两者都设置,则使用 "ignore-duplicates": true
。
merge-dev
默认情况下,包含文件的 autoload-dev
和 require-dev
部分会被合并。设置 "merge-dev": false
将禁用此行为。
merge-extra
设置 "merge-extra": true
启用合并包含文件 extra
部分的内 容。extra 部分的正常合并模式是接受找到的任何键的第一个版本(例如,主配置中的键会胜过任何导入的配置中找到的版本)。如果 replace
模式(见上文)处于活动状态,则此行为将改变,最后找到的键将获胜(例如,主配置中的键将被导入配置中的键替换)。如果指定了 "merge-extra-deep": true
,则部分将类似于 array_merge_recursive() 进行合并 - 但是重复的字符串数组键将被替换而不是合并,而数字数组键将按常规合并。根据使用的 Composer 插件及其被 Composer 处理的顺序,合并 extra 部分的实用性可能会有所不同。
注意,merge-plugin
部分不包括在合并过程中,除非禁用 递归。
merge-scripts
设置 "merge-scripts": true
启用合并包含文件 scripts
部分的内 容。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
文件。