控制Composer for PHP编写包的确切文件夹/目录



背景

我正在尝试使用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"
}
}
}
]
}

考虑到我是作曲家的新手,我可能有很多方法可以改进这一点;欢迎提出任何建议。无论哪种方式,我都希望这能帮助其他人实现同样的目标。

相关内容

  • 没有找到相关文章

最新更新