1

的背景

我正在尝试使用Composer来管理 WordPress 插件的依赖项。我已经构建了几个 PHP 库RESTianSidecar,我想将它们包含在我们正在构建的几个插件的子目录中,并且这些 PHP 库托管在 GitHub 上。WordPress 插件(当前)托管在私有 BitBucket 存储库中,因为它们是为客户端提供的,但是当我们准备发布它们时,这些插件也将发布到 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个多小时了。任何帮助,将不胜感激。

-麦克风

4

3 回答 3

1

您可以尝试使用wordpress-plugin与包结合的类型composer/installers在安装程序自述文件中阅读有关此内容的更多信息。它应该做你想做的事。

于 2012-11-24T12:42:39.383 回答
0

问题是我只能让 Composer 将它们放在 /newclarity/ 子目录中,这比我想添加到插件的目录结构中更复杂('newclarity' 是我们的 GitHub 帐户):

不,那不是真的,至少在你的意思上不是真的。Composer 创建newclarity- 文件夹,因为您在包名称中指定它composer.json作为包名称的一部分,例如

"name": "newclarity/sidecar"

我不确切知道,但你可以尝试将其命名为“sidecar”。但是,不鼓励这样做,因为存在的包越多,包之间的冲突就越可能发生,因此如果没有更高的要求,您应该保留两级文件夹结构,以防止这种情况发生。

于 2012-11-24T00:41:43.633 回答
0

所以我想出了一个可行的解决方案,但它并不优雅,我真的希望有一个简单而优雅的解决方案,因此我在 StackOverflow 上发布了我的问题。

在这里没有更好的答案后,我在 Composer 论坛上发布了一个功能请求,并关闭了请求,因为“在大多数情况下,代码的安装位置无关紧要”。可悲的是,有些人觉得他们看重的东西是唯一值得看重的东西。

由于似乎没有正式的方法可以做到这一点,也没有兴趣代表 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"
        }
      }
    }
  ]
}

鉴于我是 Composer 的新手,我可能有很多方法可以改进它;欢迎任何建议。无论哪种方式,我希望这可以帮助其他试图实现相同目标的人。

于 2012-11-25T00:30:44.353 回答