starbug / composer-modules-plugin
一个用于生成模块列表的Composer插件。
v0.8.1
2021-02-03 22:29 UTC
Requires
- composer-plugin-api: ^2.0
- marcj/topsort: ^2.0
Requires (Dev)
- composer/composer: ^2.0
- starbug/devel: *
This package is auto-updated.
Last update: 2024-09-29 05:56:13 UTC
README
一个将特定类型的包的拓扑排序列表导出到vendor/modules.php的Composer插件。
这允许在Composer之上构建框架模块系统。假设你想创建一个模块系统,你可能希望有一种方式让模块声明自己,并允许模块声明其他模块作为依赖项。Composer已经以比大多数框架开发者可能实现的方式更鲁棒的方式做到了这一点。如果我们想在Composer之上构建模块系统,我们实际上只需要一种方法来拉出相关包的列表,对它们进行排序,并可能从它们中获取一些配置数据。
用法
首先,为你的模块选择一个包类型。我们将使用starbug-module
,所以这样一个模块的composer.json
将看起来像这样。
{ "name": "starbug/my-module", "type": "starbug-module" }
要使用此作为模块类型,我们需要在根包中做两件事。
- 要求
starbug/composer-modules-plugin
- 在
extra
下添加modules-plugin
键,将composer包类型映射到你的模块类型。
以下是一个包含上述内容,并要求上面示例模块(starbug/my-module
)的composer.json
。
{ "name": "starbug/my-project", "type": "project", "require": { "starbug/composer-modules-plugin": "^0.8", "starbug/my-module": "^1.0" }, "extra": { "modules-plugin": { "types": { "starbug-module": "module" } } } }
根据上述包定义,当你运行composer install
或composer update
时,将生成一个包含以下内容的文件到vendor/modules.php
。
<?php return [ "my-module" => [ "type" => "module", "path" => "vendor/starbug/my-module" ] ];
参数
你还可以从模块传递参数。为此,我们必须在根包中指定参数名称,并为每个模块指定参数值。
要在根包中指定参数名称,我们可以在modules-plugin
下添加一个parameters
键。
{ "name": "starbug/my-project", "type": "project", "require": { "starbug/composer-modules-plugin": "^0.8", "starbug/my-module": "^1.0" }, "extra": { "modules-plugin": { "types": { "starbug-module": "module" }, "parameters": ["color"] } } }
要从模块传递参数,直接在extra
下指定。
{ "name": "starbug/my-module", "type": "starbug-module", "description": "An example module.", "license": "GPL-3.0-or-later", "extra": { "color": "blue" } }
添加了颜色参数后,我们的输出模块列表现在将如下所示。
<?php return [ "my-module" => [ "type" => "module", "path" => "vendor/starbug/my-module", "color" => "blue" ] ];
致谢
拓扑排序实现由marcj/topsort提供。