让我先描述一下我在做什么:
我正在开发两个库,分别叫它们A和B——它们都不是公开的,在它们稳定之前我不想发布它们。
库A依赖于库b
这两个库位于独立的本地Git存储库中,并且具有单独的composer.json
文件。
我的问题是:在开发过程中,我需要一种方法来指定库a中库B的依赖关系-这很简单,它只是库a的"require"
部分中的一个条目,并且由于没有任何版本控制或提交,我指定"dev-master"
作为版本要求。
问题是,库B当然还没有真正"存在"到任何地方,因为这都是在本地Git存储库上的本地开发。
我不想要的是,我不想必须向库B提交更改,并且每次增量更改都必须为库a做composer install
。
事实上,我根本不想"安装"库B,只要我只是在本地的存储库上工作-也就是说,我不想在库A的vendor
文件夹中复制库B,我只想为库A生成的自动加载器直接指向我的本地库B文件夹。
肯定有办法做到这一点吧?我花了半天时间搜索和阅读文档、博客文章、第三方指南、堆栈溢出问题等,但一无所获。
对于任何开发人员来说,这难道不是一个完全常见的场景和需求吗?
理想情况下,我也希望能够以某种方式用本地文件做到这一点-也就是说,我宁愿不必用仅与我相关的设置污染我的composer.json
文件,而我正在开发。但这是次要的——我可以忍受"破解"我的本地composer.json
,避免在开发过程中检查更改,但我不能忍受每次增量更改都必须提交和安装/更新/复制文件。
任何想法?
我认为人们同时开发两个全新的库并不常见,但我同意我们应该以某种方式更好地支持这一点。
我认为最简单/唯一的方法是使用本地VCS存储库定义在libA中安装libB (file:///path/to/foo/)。git works),然后将vendor/lib/A替换为指向libA文件夹的符号链接。运行update时要小心,因为我不太确定在这种情况下会发生什么。
另一种不那么漂亮但可能更简单的方法是在libA的vendor目录下开发libB,你可以在libB的文件夹中运行install来获取任何开发依赖项。虽然有点丑,但在我看来还不算太夸张。