jelix/composer-module-setup

Composer插件,用于自动将Jelix模块声明到Jelix应用程序中

1.1.0 2022-10-12 14:08 UTC

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-dirvar-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文件中,在modulesPathpluginsPath属性中,以及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_COMPOSERtrue或在vendor目录中创建一个名为JELIX_DEBUG_COMPOSER的空文件。

启动Composer后,您将在vendor目录中找到一个名为jelix_debug.log的文件。