将composer与遗留插件系统集成


Integrating composer with legacy plugin system

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

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

另一种选择是继续为每个插件提供composer包,但也有另一个插件(我们称之为框架插件),它只有多个插件可以使用的包。这样做的好处是没有重复的包,所有插件都可以与框架插件附带的包版本一起使用;但此时会有很多自动加载器,这从来都不是一件好事,而且版本管理变得非常复杂。

当然,如果我能把我的插件当作composer包,在根目录中有一个供应商文件夹,并通过composer命令行安装,这会容易得多;但这个系统的一个要求是插件可以通过ftp进行管理,而不是ssh。

我想得越多,它似乎就越不可能,我知道作曲家并不是为这个而设计的;但有人想过如何实现这一目标吗?

Wordpress可以与composer完全集成-如果您使用composer/installers库,那么您可以包含插件或主题,这些插件或主题有自己的composer.json文件,类型设置为Wordpress-plugin或Wordpress主题,并将它们放在正确的位置(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(或类似的)中,你可以安装你自己的composer插件/主题,包括为它们添加repo,如下所示:

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

确保您在自己插件的git repo中有一个composer.json,类型设置为wordpress-plugin或wordpress-theme。只需将它们的名称添加到项目的composer.json的require部分。我经常为购买的插件这样做——我为它们创建一个新的私有回购,并添加一个composer.json.

当涉及到部署时,您无法在远程服务器上运行composer安装,但您可以从运行安装命令的工作副本中进行FTP。或者,如果你使用的是Git,你可以有一个接收后挂钩设置,导出项目,运行composer安装,然后FTP。