背景
我正在尝试使用Composer来管理WordPress插件的依赖关系。我已经构建了几个PHP库(RESTian&Sidecar)我想将它们包含在我们正在构建的几个插件的子目录中,这些PHP库托管在GitHub上。WordPress插件(目前)托管在私人BitBucket repos中,因为它们是为客户端托管的,但当我们准备发布这些插件时,这些插件也会发布到WordPress插件库中。
问题
我想要一个相对于插件根目录的/libraries/restian/
和/libraries/sidecar/
的目录结构。对于那些知道WordPress的人来说,他们最终会像这样安装:
/wp-content/plugins/my-wp-plugin/libraries/restian/
/wp-content/plugins/my-wp-plugin/libraries/sidecar/
问题是,我只能让Composer将它们放在/newclarity/
子目录中,这比我想添加到插件的目录结构中更复杂('newclarity'
是我们的GitHub帐户):
/wp-content/plugins/my-wp-plugin/libraries/newclarity/restian/
/wp-content/plugins/my-wp-plugin/libraries/newclarity/sidecar/
来源
这是我用来研究和测试的composer.json
文件:
{
"name":"mikeschinkel/my-wp-plugin",
"description":"My WordPress Plugin",
"type":"wordpress-plugin",
"config":{
"vendor-dir":"libraries/"
},
"require": {
"newclarity/restian":"dev-master",
"newclarity/sidecar":"dev-master"
},
"repositories":[
{
"type":"git",
"url":"https://github.com/newclarity/restian.git"
},
{
"type":"git",
"url":"https://github.com/newclarity/sidecar.git"
}
]
}
以下是来自GitHub:托管库的当前composer.json
文件
{
"name": "newclarity/restian",
"description": "RESTian: A base class library to simplify building RESTful/Web API clients in PHP",
"require": {
"php": ">=5.2.4"
}
}
和:
{
"name": "newclarity/sidecar",
"description": "Sidecar: The Missing Plugin API for WordPress",
"require":{
"php":">=5.2.4"
}
}
我已经研究了4个多小时了。如有任何帮助,我们将不胜感激。
-Mike
您可以尝试将wordpress-plugin
类型与composer/installers
包结合使用。请在Installers README上阅读更多相关信息。它应该做你想做的事。
问题是我只能让Composer将它们放在/newclarity/子目录中,这比我想添加到插件的目录结构中更复杂('newclearity'是我们的GitHub帐户):
不,这不是真的,至少你的意思不是真的。Composer创建newclarity
-文件夹,因为你在composer.json
中指定它作为包名称的一部分,例如
"name": "newclarity/sidecar"
我不太清楚,但你可以试着把它命名为"sidecar"。然而,这是不鼓励的,因为包之间的冲突越来越多,可能存在的包越多,因此,如果没有更高的要求,您应该使用两级文件夹结构来防止这种情况发生。
所以我想出了一个有效的解决方案,但它很不雅,我真的希望有一个简单优雅的解决方案——因此我在StackOverflow上发布了我的问题。
在这里没有更好的答案后,我在Composer论坛上发布了作为功能请求,并关闭了请求,因为"在大多数情况下,代码安装在哪里并不重要。">有些人觉得他们看重的是唯一值得重视的东西,这很可悲。
由于似乎没有官方的方法来做到这一点,也没有兴趣代表作曲家团队来让它变得更容易,我决定继续发布我的解决方案,以防其他人以同样的方式把头撞到墙上。它很难看,但很管用。
与其引用Git回购,不如为每个回购创建一个"内联包">;下面是它的样子(注意:我添加了'#'
注释,这些注释当然不是有效的JSON
,但只是为了调出我更改的内容。):
{
"name":"mikeschinkel/my-wp-plugin",
"description":"My WordPress Plugin",
"type":"wordpress-plugin",
"config":{
"vendor-dir":"libraries"
},
"require": {
"restian":"dev-master", # Short name 'restian' used here.
"sidecar":"dev-master" # Short name 'sidecar' used here.
},
"repositories":[
{
"type":"package", # type=package vs. type=git
"package":{
"name":"sidecar", # Short name 'sidecar' used here.
"version":"dev-master",
"source":{ # This could be "dist" or "source"
"type":"git",
"url":"https://github.com/newclarity/sidecar",
"reference":"master"
}
}
},
{
"type":"package", # type=package vs. type=git
"package":{
"name":"restian", # Short name 'restian' used here.
"version":"dev-master",
"source":{ # This could be "dist" or "source"
"type":"git",
"url":"https://github.com/newclarity/restian",
"reference":"master"
}
}
}
]
}
考虑到我是作曲家的新手,我可能有很多方法可以改进这一点;欢迎提出任何建议。无论哪种方式,我都希望这能帮助其他人实现同样的目标。