使用Composer处理依赖的,未发布的库

时间:2014-06-03 13:49:27

标签: php dependencies composer-php

让我先描述一下我在做什么:

我正在处理两个图书馆,称他们为A和B - 这些都不在任何地方公开,而且我不想发布它们,直到它们恢复稳定。

图书馆A取决于图书馆B.

这两个库位于不同的本地Git存储库中,并且具有单独的composer.json个文件。

我的问题是:在开发过程中,我需要一种方法来指定库A中对库B的依赖 - 这很简单,它只是库A的"require"部分中的一个条目,由于没有任何版本或提交,我将"dev-master"指定为版本要求。

问题是,图书馆B当然不是真的存在"在任何地方,因为这是本地Git存储库的所有本地开发。

想要的是,我不想要对图书馆B进行更改,并且必须为图书馆A执行composer install增量变化。

事实上,我并不想安装"图书馆B,只要我在本地处理存储库 - 也就是说,我不想在图书馆A的vendor文件夹中复制图书馆B,我只是希望库A的生成的自动加载程序直接指向我的本地Library B文件夹。

当然必须有办法做到这一点?我花了半天的时间搜索和阅读文档,博客文章,第三方指南,堆栈溢出问题等等 - 一无所获。

对于几乎所有的开发人员来说,这不是一个完全常见的场景和要求吗?

理想情况下,我也希望能够以某种方式使用本地文件执行此操作 - 也就是说,我宁愿不必使用仅设置污染我的composer.json文件在我发展的过程中与我息息相关。但这是次要的 - 我可以忍受" hack"我的本地composer.json并避免在开发期间检查更改,但我不能忍受每次增量更改时都必须提交和安装/更新/复制文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这并不常见,我认为人们同时使用两个全新的库,但我同意我们应该以某种方式更好地支持它。

我认为最简单/唯一的方法是使用本地VCS存储库定义(文件:///path/to/foo/.git工作)在libA中安装libB,然后替换vendor / lib / A通过符号链接到libA的文件夹。如果你运行更新,请小心,因为我不太确定在那种情况下会发生什么。

另一个不太漂亮但也许更简单的方法是在libA的供应商目录中开发libB,你可以在libB的文件夹中运行install以获得任何dev依赖项。这有点难看,但不是那么引人注目的IMO。