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
的文件。