jelix / composer-module-setup
Composer插件,用于自动将Jelix模块声明到Jelix应用程序中
Requires
- composer-plugin-api: ^2.0
Requires (Dev)
- composer/composer: ^2.0.3
- jelix/file-utilities: 1.8.*
- phpunit/phpunit: 9.5.*
README
一个Composer插件,用于自动将jelix模块声明到jelix应用程序中
适用于Jelix 1.6.9及以上版本。
通过Composer提供模块的作者应声明包含模块或插件的目录。这将避免开发者在application.init.php(Jelix 1.7)或配置(Jelix 1.6.9+)中声明它们。
安装
在您的应用程序的composer.json中声明插件并授权Composer执行该插件。
{
"require": {
"jelix/composer-module-setup": "^1.0.0"
},
"config": {
"allow-plugins": {
"jelix/composer-module-setup": true
}
}
}
在包中声明模块和插件
通过Composer提供模块的作者应声明包含模块或插件的目录。这将避免开发者在application.init.php中声明它们。
为了声明它们,他应在composer.json中的extra/jelix对象中添加信息。
{
"extra": {
"jelix": {
}
}
}
在此对象中,他可以添加三种类型的信息
modules-dir,包含可以找到模块的目录的数组。这些路径将被添加到jelix配置参数modulesPath中。plugins-dir,包含可以找到插件的目录的数组。这些路径将被添加到jelix配置参数pluginsPath中。modules,包含模块目录的数组。这些路径将被添加到jelix配置的modules部分中,作为<module>.path=<path>。
例如,在仓库中,如果模块位于"modules/"目录中,作者应将这些信息添加到其composer.json中
{
"extra": {
"jelix": {
"modules-dir" : [
"modules/"
],
"plugins-dir" : [
"plugins/"
],
"modules" : [
"mymoduleaaa/",
"mymodulebbb/"
]
}
}
}
在应用程序级别声明模块和插件
应用程序开发人员也可以以相同的方式在应用程序的composer.json中声明其模块和插件
{
"require": {
"jelix/composer-module-setup": "^1.0.0"
},
"config": {
"allow-plugins": {
"jelix/composer-module-setup": true
}
},
"extra": {
"jelix": {
"modules-dir" : [
"myapp/modules/"
],
"plugins-dir" : [
"myapp/plugins/"
],
"modules" : [
"mainmodule/"
]
}
}
}
自动启用入口点的模块(仅限jelix 1.6)
在模块包中,您可以指定模块应在哪个入口点启用。
{
"extra": {
"jelix": {
"autoconfig-access-16" : {
"__any_app" : {
"<modulename>": {
"__global": 1
}
},
"app/identifiant1" : {
"<modulename>": {
"__global": 1,
"index" : 2,
"admin" : 1
}
}
}
}
}
}
app/identifiant1必须是项目.xml文件中指示的应用程序ID(<info>元素的id属性)。
在应用程序的composer.json中,您还可以为每个模块指示相同的信息,当模块不提供"autoconfig-access-16"配置时。
{
"extra": {
"jelix": {
"modules-autoconfig-access-16" : {
"package/name1" : {
"<modulename>": {
"__global": 1,
"index" : 2,
"admin" : 1
}
},
"package/name2" : {
"<modulename>": {
"__global": 1,
"index" : 2,
"admin" : 1
}
}
}
}
}
}
如果包已存在"autoconfig-access-16"配置,则此modules-autoconfig-access-16配置具有优先级。
指示应用程序或配置目录的路径
在应用程序级别,composer.json可能包含应用程序目录(包含project.xml等的目录)和var/config目录的路径。
当包含composer.json文件的目录不是应用程序目录且/或var/config不在应用程序目录中时,这很有用。
因此,您必须将这些路径设置为app-dir和var-config-dir。路径应该是相对于composer.json目录的,也可以是绝对路径。
{
"require": {
"jelix/composer-module-setup": "^1.1.0"
},
"extra": {
"jelix": {
"app-dir" : "myapp/",
"var-config-dir" : "/var/lib/myapp/config/",
"modules-dir" : []
}
}
}
在Jelix 1.7及以上版本
为了使用在composer.json文件中声明的模块,您应将jelix_app_path.php文件包含在您的application.init.php中。
<?php require (__DIR__.'/vendor/autoload.php'); jApp::initPaths( __DIR__.'/' //__DIR__.'/www/', //__DIR__.'/var/', //__DIR__.'/var/log/', //__DIR__.'/var/config/', //__DIR__.'/scripts/' ); jApp::setTempBasePath(realpath(__DIR__.'/temp').'/'); require (__DIR__.'/vendor/jelix_app_path.php');
此jelix_app_path.php文件由composer-module-setup插件自动生成。
请注意:在Jelix 1.7及更高版本中,配置文件中通过modulesPath/pluginsPath参数声明模块和插件已不再支持。
Jelix 1.6.x 版本等于或高于 1.6.9
Composer插件会自动将模块和插件目录声明到localconfig.ini.php文件或mainconfig.ini.php文件中,在modulesPath和pluginsPath属性中,以及modules部分。
您还可以指定是否要插件修改localconfig.ini.php或mainconfig.ini.php文件。默认情况下是localconfig.ini.php。在config-file-16中指定配置文件名。
{
"require": {
"jelix/composer-module-setup": "^1.0.0"
},
"extra": {
"jelix": {
"app-dir" : "myapp/",
"var-config-dir" : "/var/lib/myapp/config/",
"modules-dir" : [],
"config-file-16": "mainconfig.ini.php"
}
}
}
插件调试
设置环境变量JELIX_DEBUG_COMPOSER为true或在vendor目录中创建一个名为JELIX_DEBUG_COMPOSER的空文件。
启动Composer后,您将在vendor目录中找到一个名为jelix_debug.log的文件。