Octobercms 中的插件管理和版本控制

Plugin management and versioning in Octobercms

我想知道如何在 Octobercms 中对项目的插件依赖项进行版本控制。

当我使用命令 php artisan plugin:install PLUGIN 时,所有插件文件都添加到 plugins/ 文件夹中,不会被 git 忽略。

我每次克隆存储库时都必须再次执行此操作吗?

有没有更好的解决方案(子模块,composer)?

只需在他们的网站上创建项目,将插件添加到创建的项目并将安装与该项目相关联。插件将自动更新并同步。例如:你通过网站添加插件到项目中,你的安装会自动安装

我会回答我自己的问题。关于应如何部署 OctoberCMS 项目有一个 ongoing discussion,因此很难知道最佳实践是什么。

插件定义中的依赖关系

核心开发者 solution 似乎在您的插件中添加依赖项作为数组 :

/**
* @var array Plugin dependencies
*/
public $require = ['RainLab.Blog', 'RainLab.User', 'RainLab.Pages', 'Manogi.Mediathumb'];```

在我的例子中,虽然依赖项没有自动安装,并且当我收到警告时,我的插件仍然加载错误。

使用作曲家

我意识到 RainLab 的插件有一个 composer.json 文件,类型为 october-plugin(例如参见 [​​=27=] 插件)。

因此您可以像任何作曲家包一样简单地需要一个插件,它们将安装在您的 plugin/ 目录中:

composer require rainlab/user-plugin

虽然不是每个插件都有这个约定,比如 Manogi.Mediathumb 插件。我没有尝试要求它,但我猜它会安装在 vendor/ 目录中。

示例 composer.json 要求:

"require": {
    "php": ">=5.5.9",
    "october/rain": "~1.0",
    "october/system": "~1.0",
    "october/backend": "~1.0",
    "october/cms": "~1.0",
    "laravel/framework": "5.1.*",
    "wikimedia/composer-merge-plugin": "dev-master",
    "vojtasvoboda/oc-twigextensions-plugin": "dev-master",
    "rainlab/blog-plugin": "dev-master",
    "rainlab/pages-plugin": "dev-master",
    "rainlab/user-plugin": "dev-master",
}

忽略 git

中的插件文件夹

至于忽略供应商插件,您可以在 .gitignore 文件中添加规则,忽略除您的命名空间之外的所有插件:

plugins/*
!plugins
!plugins/mynamespace/

禁用 CMS 中的更新功能

最后一步是更改 config/cms.php 中的 disableCoreUpdates 变量:

'disableCoreUpdates' => true,

如本文件的评论部分所述:

If using composer or git to download updates to the core files, set this value to 'true' to prevent the update gateway from trying to download these files again as part of the application update process. Plugins and themes will still be downloaded.

使用作曲家更新

现在如果你想更新核心包和插件,运行

composer update

在十月网站上创建一个项目

此处推荐。不过,我不喜欢依赖此类服务。


结论

我想前两种方法是有效的,取决于您是想在 CLI 中更新还是直接在 CMS 中更新(我想您是否希望您的客户端能够更新)。

我再测试一下第一个,看看能不能让CMS自动下载插件。如果我成功了,我会使用这个解决方案,因为我可以从 CMS 和使用 php artisan october:update 从命令行更新。两全其美。