picocms / composer-installer

一个负责为Pico安装插件和主题的Composer插件,Pico是一个简单、快速、基于平面文件的CMS。

安装次数: 30,693

依赖者: 3

建议者: 2

安全: 0

星星: 4

关注者: 4

分支: 3

开放问题: 1

类型:composer-installer

v1.0.1 2019-11-24 22:50 UTC

This package is auto-updated.

Last update: 2024-08-27 22:06:02 UTC


README

这是Pico官方Composer安装程序的仓库。

Pico是一个简单、快速、基于平面文件的CMS。更多信息请访问http://picocms.org/

此Composer插件负责使用Composer包管理器(即在命令行上运行composer install)安装Pico插件和主题。它负责识别为{ "type": "pico-plugin" }{ "type": "pico-theme" }的包,并指示Composer将这些包安装到Pico的plugins/themes/文件夹。

安装程序还会创建一个包含所有已安装Pico插件及其相应PHP类的vendor/pico-plugin.php文件(需要post-autoload-dump事件,见下文“安装”部分)。该文件用于Pico 2.0+在运行时加载此类插件,甚至允许您完全禁用基于文件系统的插件加载。只需确保在您的composer.json中添加适当的自动加载部分 - 否则Pico将找不到您的插件PHP类。

安装程序的行为可以在插件、主题的composer.json和根包的composer.json中完全配置(见下文“用法”部分)。

有关如何贡献或获取帮助的信息,请参阅picocms/Pico

安装

如果您已经使用了Pico的官方composer启动项目(picocms/pico-composer),您的网站composer.json(“根包”)已经依赖于picocms/composer-installer。如果不是这样,请运行以下命令从Packagist.org加载它

$ composer require picocms/composer-installer:^1.0

Composer插件尝试自动注册自身为post-autoload-dump事件。这是安装程序创建vendor/pico-plugin.php的前提条件。如果安装程序成功执行此操作,您将看到以下三行,当您运行composer installcomposer update

Generating autoload files
> Pico\Composer\Installer\PluginInstaller::postAutoloadDump
Creating Pico plugins file

如果您只看到前两行而没有第三行,请确保您的网站在根包的composer.json中将自身标识为{ "type": "project" },并且直接依赖于picocms/composer-installer。如果您只看到第一行,请通过在GitHub上创建一个新的问题来告知我们。要解决此问题,请将以下内容添加到根包的composer.json

{
    "scripts": {
        "post-autoload-dump": [
            "Pico\\Composer\\Installer\\PluginInstaller::postAutoloadDump"
        ]
    }
}

用法

您的插件和主题本身不需要要求picocms/composer-installer。它们只需要在composer.json中指定类型。

{
    "type": "pico-plugin"
}

{
    "type": "pico-theme"
}

更多关于主题的信息

Pico主题安装程序将自动通过将包名转换为StudlyCase并移除(如果存在)-theme后缀来确定安装目录。这一步骤的结果被称为“安装名称”。例如,包pico-nyan-cat-theme被安装到themes/PicoNyanCat目录。然后您可以通过将theme: PicoNyanCat添加到Pico的config/config.yml中,来使用此主题。

您可以通过在主题的composer.json中设置installer-name额外参数来覆盖此行为。例如,Pico官方默认主题(picocms/pico-theme)在其composer.json中包含以下行,指示安装程序将其安装到themes/default目录。

{
    "extra": {
        "installer-name": "default"
    }
}

更多关于插件的信息

Pico插件安装程序将自动通过将包名转换为StudlyCase并移除(如果存在)-plugin后缀来确定安装目录。这一步骤的结果被称为“安装名称”。安装名称稍后将被Pico用于加载插件的PHP类。例如,包pico-nyan-cat-plugin被安装到plugins/PicoNyanCat目录,Pico稍后使用PicoNyanCat PHP类来加载插件。

为确保安装程序正常工作,请确保您的插件composer.json中有一个适当的autoload部分,以便Pico稍后可以找到PicoNyanCat PHP类。

{
    "autoload": {
        "classmap": [ "PicoNyanCat.php" ]
    }
}

您可以通过在插件的composer.json中设置installer-name额外参数来更改安装目录。通过覆盖安装名称,您也更改了Pico用于加载插件的PHP类。例如,如果您的包名为my-vendor/my-pico-plugin,安装程序会将其安装到plugins/MyPico目录。如果您不想移除-plugin后缀,请将以下行添加到您的插件composer.json中。

{
    "extra": {
        "installer-name": "MyPicoPlugin"
    }
}

安装程序现在会将其插件安装到plugins/MyPicoPlugin目录,Pico使用MyPicoPlugin PHP类来加载插件。

高级插件设置

如果您不是绝对的Pico专家,请不要再往下看了!即使听起来很方便,以下内容仅适用于非常高级的设置。

Pico插件安装程序由两部分组成:首先,它确定安装名称以决定插件安装到哪个目录。其次,它创建一个包含所有已安装插件及其相应PHP类的vendor/pico-plugin.php文件。如果此文件存在,Pico 2.0+将使用它来加载这些插件。Pico自然会确保这些插件不会作为本地插件再次加载。但是,只有当使用post-autoload-dump事件时(通常是这种情况),才会创建vendor/pico-plugin.php文件。

如果没有使用post-autoload-dump事件,安装程序不会创建vendor/pico-plugin.php文件,Pico将基于文件系统的方式加载插件:它会查看目录名称,尝试包含此目录中相同名称的.php文件,并使用相同的名称作为PHP类。换句话说:如果存在plugins/PicoNyanCat目录,Pico将包含plugins/PicoNyanCat/PicoNyanCat.php文件,并使用PicoNyanCat PHP类来加载插件。如果不起作用,Pico将无法恢复地退出。

如您所注意到的,这可能会出错。所以,请小心!

如果您想覆盖Pico用于加载插件的PHP类,或者如果您想同时加载多个插件,请使用插件composer.json中的pico-plugin额外参数。插件集合的composer.json可能看起来如下。

{
    "extra": {
        "installer-name": "MyPluginCollection",
        "pico-plugin": [
            "MyVendor\\MyPluginCollection\\MyFirstPlugin",
            "MyVendor\\MyPluginCollection\\MySecondPlugin"
        ]
    }
}

请注意,如果您想与他人共享插件,绝对不要使用此功能。

使用根包的composer.json

上面解释的所有对 composer.json 的调整也可以用于根包的 composer.json。根包的 composer.json 甚至优先于插件或主题的 composer.json,这允许您针对您的网站特定地覆盖安装程序的行为!

例如,如果您想将 Pico 主题 some-vendor/nyan-cat-theme 安装到 themes/TacNayn 目录而不是 themes/NyanCat,请将以下内容添加到根包的 composer.json

{
    "extra": {
        "installer-name": {
            "some-vendor/nyan-cat-theme": "TacNayn"
        }
    }
}

除了使用确切的包名外,您还可以使用 vendor:(例如 vendor:some-vendor)和 name:(例如 name:nyan-cat-theme)前缀来匹配插件或主题包的名称。

自然,这不仅仅限于主题,对插件也有效。然而,请务必小心,通过更改插件的安装程序名称,您(通常)也会更改 Pico 用来加载插件的 PHP 类。 这可能会破坏您的安装! 请参阅上面的“高级插件设置”部分获取更多信息。简单来说,不要为插件使用此功能!

有时您的主题目录不叫 themes/,而是叫其他名字,比如 public/。您可以使用 pico-theme-dir(分别)来更改 themes/plugins/ 目录的路径。只需将以下内容添加到您的根包的 composer.json

{
    "extra": {
        "pico-theme-dir": "public/",
        "pico-plugin-dir": "/some/absolute/path/"
    }
}

那么不使用 Composer 的网站怎么办呢?

不用担心,Pico 既不需要您使用 Composer,也不需要 picocms/composer-installer

如果您的插件由 PicoNyanCat PHP 类组成,请创建一个 PicoNyanCat.php 文件,并将其类定义写入该文件。如果您想使用该插件,只需将 PicoNyanCat.php 移动到您的 plugins/ 目录。如果您的插件由多个文件组成(推荐,如 README.mdLICENSE 文件),请创建一个 plugins/PicoNyanCat/ 文件夹,并将 PicoNyanCat.php 移动到该文件夹(这样您就得到 plugins/PicoNyanCat/PicoNyanCat.php)。

如果您想分享您的插件,只需分享 plugins/PicoNyanCat/ 文件夹,并指导您的用户将其复制到他们的 plugins/ 目录。就这样!

有人可能会合理地问,为什么他最初应该使用 Composer 和 picocms/composer-installer。答案很简单:因为 Composer 使用户使用起来更加方便——特别是当有超过两个或三个插件时!请参阅 Pico 的官方 Composer 启动项目(picocms/pico-composer)以获取更完整的解释。