使用php进行依赖管理(适用于自己的库)

时间:2013-10-31 09:03:21

标签: php composer-php symlink dependency-management phing

我大部分时间都在开发Joomla扩展。通常情况下,需要重用帮助程序类,安装类等。到目前为止,我只是复制粘贴的代码。我知道,我知道......但这始终是最快的解决方案,从长远来看,这是最慢的解决方案。 我现在一直在考虑如何在我的项目中管理依赖管理。我已经测试了作曲家,我喜欢它,但它似乎不适合我。让我详细说明一下。我们假设我们有以下文件夹结构

projects
- library A
- library B
- project A
- project B
- project C

项目A和B都使用库A和B,其中项目C仅使用库A. 如果我使用composer,那么文件夹的结构将如下所示:

projects 
- library A
- library B
- project A
-- vendor
--- library A
--- library B
- project B
-- vendor
--- library A
--- library B
- project C
-- vendor
--- library A

我不知道 - 如果我使用的是我自己不开发的第三方库,但如果我的硬盘驱动器上已经有库A和库B的代码,那么这可能会很好 - 为什么< em> * 我会将它们复制到供应商文件夹吗?不仅如此,每当我更新我的库时,我都需要在每个项目中进行作曲家更新以获得最新的库版本。这对我来说似乎有点生产?

所以我想出的是 - &gt;符号链接。我可以将符号链接放到我的库A和B中,然后每当我做出更改时 - >更改将自动应用于我的所有项目。

每当我压缩扩展名时,我的phing脚本将获取库并将其包含在zip中。 所以这似乎对我的开发工作流程有好处,但还有另一个问题。我的一些项目可以在github上找到,其他开发人员可以使用它们来做任何他们喜欢的事情等等。现在我需要向他们解释一下,他们应该创建与我相同的目录结构,以便构建脚本能够运行。他们将下载项目A,但他们必须下载库A和B.

这就是作曲家的伟大之处。但是,如果我想让它变得简单,我需要使用符号链接... 你是如何处理这种情况的?您的工作流程是什么?如何构建项目和库,以便不必在整个地方复制代码,同时让其他开发人员在几秒钟内轻松上手?欢迎任何提示!

3 个答案:

答案 0 :(得分:0)

看到你已经开始考虑符号链接,假设所有这些项目都在同一台服务器上,我建议如下:

共享供应商目录

  • 供应商A.
    • 当前 - &gt; 0.3(符号链接到“所有”项目共享的“稳定”版本“)
    • 0.1
    • 0.2
    • 0.3
  • 供应商B.
    • 当前 - &gt; 0.0.2
    • 0.0.1
    • 0.0.2
    • 0.0.3-β

因此,当您发布其中一个依赖项的新更新时,您可以通过切换项目版本来正确测试这些,如果您满意地将其应用于所有项目仅仅是符号链接开关

项目A中的供应商目录

  • vendorA - &gt; /共享/ vendorA /电流
  • vendorB - &gt; /共享/ vendorB /电流

项目B中的供应商目录 具有不同的要求

  • vendorA - &gt; /shared/vendorA/0.1
  • vendorB - &gt; /共享/ vendorB /电流

但我真的很喜欢作曲家......

根据您的要求,您还希望能够使用作曲家的外部依赖关系,您可能希望尝试这个方向。

"autoload": { "psr-0": {"vendorA": "/shared/vendorA/current"} }

答案 1 :(得分:0)

如果您使用Composer,并且开发了“库A”和“库B” - 请不要考虑可能使用它们的应用程序。当你在这些库中更改某些内容时,它必须独立工作。

开发“应用程序A”时,不要考虑“此功能对应用程序B也很有用”。想想“这个功能属于库B”。把它放在那里,然后更新应用程序A以使用它。

您无需同时更新应用程序B,只是因为您发布了较新版本的库。

答案 2 :(得分:0)

事实上,此请求存在一个未解决的问题https://github.com/composer/composer/issues/1299。不幸的是,在过去的几个月里没有任何进展。