wikimedia / 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.11.1
- php-parallel-lint/php-parallel-lint: ~1.3.1
- phpspec/prophecy: ~1.15.0
- phpunit/phpunit: ^8.5||^9.0
- squizlabs/php_codesniffer: ~3.7.1
README
Composer Merge Plugin
在 Composer 运行时合并多个 composer.json 文件。
Composer Merge Plugin 的目的是为了让那些包含 composer.json 文件并期望某些部署安装额外的 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 安装(“2.0.0”)不匹配的插件 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-replace": true, "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(可选,见下文merge-replace)
- repositories
- require
- require-dev(可选,见下文merge-dev)
- suggest
- extra(可选,见下文merge-extra)
- scripts(可选,见下文merge-scripts)
require
require
设置与include
相同,除非模式无法匹配至少一个文件,这将导致错误。
recurse
默认情况下,合并插件是递归的;如果包含的文件有一个merge-plugin
部分,它也会被处理。可以通过添加一个"recurse": false
设置来禁用此功能。
replace
默认情况下,Composer的冲突解决引擎用于确定在多个文件指定同一软件包时应安装哪个版本。可以提供一个"replace": true
设置来更改到“最后指定的版本获胜”的冲突解决策略。在此模式下,合并文件中找到的重复软件包声明将覆盖由较早文件所做的声明。文件按include
设置中指定的顺序加载,使用glob匹配的文件按字母顺序处理。
ignore-duplicates
默认情况下,Composer的冲突解决引擎用于确定在多个文件指定同一软件包时应安装哪个版本。可以提供一个"ignore-duplicates": true
设置来更改到“首先指定的版本获胜”的冲突解决策略。在此模式下,合并文件中找到的重复软件包声明将忽略较早文件所做的声明。文件按include
设置中指定的顺序加载,使用glob匹配的文件按字母顺序处理。
注意:"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
模式(见上文replace),则此行为会改变,最后找到的密钥将获胜(例如,主配置中的密钥被导入配置中的密钥所替换)。如果指定了"merge-extra-deep": true
,则部分类似于array_merge_recursive
()进行合并 - 但是字符串数组键的重复将被替换而不是合并,而数字数组键则按常规合并。合并extra部分的有用性将根据使用的Composer插件以及Composer处理它们的顺序而有所不同。
请注意,merge-plugin
部分被排除在合并过程之外,但除非禁用递归(见recurse),否则总是由插件处理。
merge-replace
默认情况下,包含文件的replace
部分会被合并。一个"merge-replace": false
设置将禁用此行为。
merge-scripts
设置 "merge-scripts": true
可以合并包含文件中 scripts
部分的内
注意:通过合并配置添加的 自定义命令
运行测试
$ composer install
$ composer test
贡献
应将错误、功能请求和其他问题报告给 GitHub 项目。
- 项目使用 PSR-2 编码标准。
- 鼓励进行测试。我们的测试覆盖率并不完美,但我们希望它越来越好,因此请尽量在您的
- 保持文档更新。确保
README.md
和其他相关文档与您的更改保持最新。 - 每个功能一个拉取请求。尽量保持您的更改专注于解决单个问题。这将使我们更容易审
许可证
Composer 合并插件遵循 MIT 许可证。有关更多详细信息,请参阅 LICENSE
文件。