我最近一直在思考如何将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。