将composer与legacy插件系统集成

时间:2013-11-19 06:32:25

标签: php composer-php

我最近一直在考虑如何将作曲家与Wordpress插件集成。是的,在任何人建议之前,Wordpress是一个要求。我想出了一些想法,但它们都有很大的缺点。

第一个系统将只包含每个插件的编辑器包(也就是在本地运行composer install,然后使用插件压缩vendor文件夹以便于上传)。优点是易于安装和简单。当多个插件安装具有相同的依赖项时会出现问题。它不仅非常臃肿,而且如果插件之间存在依赖版本差异,自动加载器会互相拧紧,只加载一个版本。

另一种选择是继续使用每个插件的编辑器包,还有另一个插件(我们称之为框架插件),它只包含多个插件将使用的包。这样做的好处就是没有重复的软件包,所有的插件都可以继续使用框架插件附带的软件包版本;但是现在会有很多自动加载器,从来都不是一件好事,版本管理变得非常复杂。

如果我可以将插件视为编写器包,并在根目录中有一个供应商文件夹,并通过composer命令行安装,那么这当然会容易得多;但是这个系统的一个要求是插件可以通过ftp管理,没有ssh。

我想的越多,看起来越少,我知道作曲家不是为此设计的;但有人对如何实现这一点有任何想法吗?

1 个答案:

答案 0 :(得分:2)

Wordpress可以与作曲家完全集成 - 如果你使用composer/installers library,你可以包含插件或主题,这些插件或主题有自己的composer.json文件,类型设置为wordpress-plugin或wordpress-theme,它将会把它们放在正确的位置(wp-content / themes而不是vendor /)。

所有公共wordpress插件和主题都可以通过Wordpress Packagist获得 - http://wpackagist.org/您只需将它包含在composer.json中,就像整个项目一样:

{
    "name": "acme/brilliant-wordpress-site",
    "description": "My brilliant WordPress site",
    "repositories":[
        {
            "type":"composer",
            "url":"http://wpackagist.org"
        }
    ],
    "require": {
        "aws/aws-sdk-php":"*",
        "wpackagist/advanced-custom-fields":"*",
        "wpackagist/posts-to-posts":"1.4.x"
    },
    "autoload": {
        "psr-0": {
            "Acme": "src/"
        }
    }
}

你可以安装你自己的作曲家插件/主题,如果他们在github(或类似)中,包括为他们添加repo如下:

{
    "type": "vcs",
    "url": "https://github.com/YourUserName/MyWordPressPlugin.git"
},

确保你自己的插件的git repo中有一个composer.json,其类型设置为wordpress-plugin或wordpress-theme。只需将他们的名字添加到该项目的composer.json的require部分即可。我经常为购买的插件执行此操作 - 我为他们创建了一个新的私人仓库并添加了composer.json。

在部署时 - 您无法在远程服务器上运行composer install,但您可以从运行install命令的工作副本中进行FTP。或者如果您使用的是Git,您可以使用post post hook挂钩设置导出项目,运行composer install然后运行FTP。