opengate / composer-merge-plugin
Composer插件,用于合并多个composer.json文件
Requires
- php: >=7.4.0
- composer-plugin-api: ^1.1||^2.0
Requires (Dev)
- ext-json: *
- composer/composer: ^1.1||^2.7.6
- mediawiki/mediawiki-phan-config: ^0.14.0
- php-parallel-lint/php-parallel-lint: ^1.4.0
- phpspec/prophecy-phpunit: ^2.2.0
- squizlabs/php_codesniffer: ^3.10.1
This package is not auto-updated.
Last update: 2024-09-28 10:59:49 UTC
README
Composer Merge Plugin
在Composer运行时合并多个composer.json文件。
Composer Merge Plugin旨在简化那些携带composer.json文件的应用程序的依赖关系管理,这些应用在部署时可能需要安装额外的Composer管理的库。它通过允许应用程序的顶级composer.json文件提供一个可选的附加配置文件列表来实现。当Composer运行时,它将解析这些文件并将它们的配置设置合并到基本配置中。然后,将使用此组合配置来下载额外的库和生成自动加载器。
Composer Merge Plugin是为了帮助安装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)
- 建议
- extra(可选,见下文的merge-extra)
- scripts(可选,见下文的merge-scripts)
require
require设置与include相同,除非模式匹配失败至少一个文件时,它将导致错误。
递归
默认情况下,合并插件是递归的;如果包含的文件有一个merge-plugin部分,它也将被处理。可以通过添加一个"recurse": false设置来禁用此功能。
替换
默认情况下,Composer的冲突解决引擎用于确定当多个文件指定相同的包时,应该安装哪个版本的包。可以提供一个"replace": true设置来更改到“最后指定的版本获胜”的冲突解决策略。在此模式下,在合并文件中找到的重复包声明将覆盖由早期文件所做的声明。文件按include设置中指定的顺序加载,通配符文件按字母顺序处理。
忽略重复项
默认情况下,Composer的冲突解决引擎用于确定当多个文件指定相同的包时,应该安装哪个版本的包。可以提供一个"ignore-duplicates": true设置来更改到“首先指定的版本获胜”的冲突解决策略。在此模式下,在合并文件中找到的重复包声明将被忽略,以优先考虑早期文件所做的声明。文件按include设置中指定的顺序加载,通配符文件按字母顺序处理。
注意:"replace": true和"ignore-duplicates": true模式是互斥的。如果两者都设置了,则使用"ignore-duplicates": true。
merge-dev
默认情况下,包含文件的autoload-dev和require-dev部分会合并。一个"merge-dev": false设置将禁用此行为。
merge-extra
"merge-extra": true设置启用合并包含文件extra部分的包含内容。正常合并模式为接受任何找到的键的第一个版本(例如,主配置中的键胜过在导入的配置中找到的版本)。如果replace模式激活(见上文替换),则此行为将改变,最后找到的键将获胜(例如,主配置中的键被导入配置中的键替换)。如果指定了"merge-extra-deep": true,则类似于array_merge_recursive()合并部分 - 然而,重复的字符串数组键将被替换而不是合并,而数字数组键则按常规合并。根据使用的Composer插件及其由Composer处理的顺序,合并额外部分的有用性可能会有所不同。
注意,merge-plugin部分被排除在合并过程之外,但除非禁用recursion(递归),否则总是由插件处理。
merge-replace
默认情况下,包含文件的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_CodeSniffer 验证约定。
- 鼓励编写测试。我们的测试覆盖率并不完美,但我们希望它越来越好,因此请尽量在您的更改中包含测试。
- 保持文档更新。确保
README.md和其他相关文档与您的更改保持一致。 - 每个功能一个 pull request。尽量使您的更改专注于解决单个问题。这将使我们更容易审查更改,并使您更容易确保您已更新必要的测试和文档。
许可证
Composer Merge 插件根据 MIT 许可证授权。有关更多详细信息,请参阅 LICENSE 文件。