laradic / composer-merge-plugin
Composer 插件,用于合并多个 composer.json 文件
Requires
- php: >=5.3.2
- composer-plugin-api: ^1.1||^2.0
Requires (Dev)
- composer/composer: ~1.0
- jakub-onderka/php-parallel-lint: ~0.8
- phpunit/phpunit: ~4.8|~5.0
- squizlabs/php_codesniffer: ~2.1.0
Replaces
README
这是 wikimedia/composer-merge-plugin
的分支。它在安装/更新过程中将所有合并的 composer 文件库名称添加到根 composer 的 replace
配置中。这样,如果您在根 composer 的 require
中也有库,并且使用合并插件在本地上合并了库,则将忽略 require
依赖项,因此库不会安装到 vendor 中。
变更
1.0.0
// MergePlugin.php protected function addPackageToRootReplaces(ExtraPackage $package) { $root = $this->composer->getPackage(); $rootReplaces = $root->getReplaces(); $constraint = new EmptyConstraint(); $constraint->setPrettyString('*'); $rootReplaces[] = new Link($root->getName(), $package->getPackage()->getName(),$constraint,'replaces','*'); $root->setReplaces($rootReplaces); $this->logger->info("Added package <comment>{$package->getPackage()->getName()}</comment> to root composer replace"); }
1.1.0
为了自定义 replaces
,您现在应该
{ "extra": { "merge-plugin": { "include": ["addons/*/*/*/composer.json", "core/*/*/composer.json", "packages/*/*/composer.json"], "replaces": ["addons/*/*/*/composer.json", "packages/*/*/composer.json"], "recurse": true, "replace": false, "merge-dev": true } } }
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 文件中一样
- 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文件。
忽略重复
默认情况下,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()合并,但重复的字符串数组键将被替换而不是合并,而数字数组键将按常规合并。合并extra部分的有用性将根据使用的Composer插件及其由Composer处理的顺序而异。
请注意,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
文件。