如何同时开发独立Git仓库的Composer包及依赖它的应用?
解决同时开发Composer包与依赖应用的方案
我来给你几个实用的方案,帮你搞定同时维护独立Git仓库的Composer包和依赖它的应用的问题:
方案一:调整Path Repository为复制模式(解决IDE调试问题)
你之前用的path仓库默认是符号链接模式,这大概率是PhpED无法识别断点的原因。我们可以改成复制模式,让Composer把包的代码直接复制到应用的vendor目录,而非创建符号链接,这样IDE就能正常识别文件并调试了。
操作步骤:
- 保持Composer包在应用外部的独立Git仓库中。
- 在应用的
composer.json里修改path仓库配置,添加symlink: false的选项:
{ "repositories": [ { "type": "path", "url": "../relative/path/to/your-package", "options": { "symlink": false } } ], "require": { "your-vendor/your-package": "*" } }
- 运行
composer update your-vendor/your-package,Composer会将包的代码复制到vendor目录。 - 当你修改包的代码后,只需重新运行
composer update就能同步到应用的vendor里。如果觉得手动更新麻烦,也可以用文件监听工具(比如watchman)自动触发更新。
另外,关于PhpED的调试问题,你还可以尝试把包的目录添加到IDE的Include Path中,让IDE主动索引包的代码,即使是符号链接模式也可能识别断点。
方案二:使用Git Subtree(替代Submodule的更友好方案)
Git Subtree可以让你把独立的包仓库代码嵌入到应用仓库的某个目录中,同时保持包仓库的独立性,比Submodule更易维护,也不会有脚本路径的困扰。
操作步骤:
- 在应用仓库中创建一个存放本地包的目录,比如
packages/your-vendor/your-package。 - 执行命令将包仓库作为subtree添加到应用中:
git subtree add --prefix=packages/your-vendor/your-package git@your-git-host/your-vendor/your-package.git main --squash
(这里的main是包仓库的主分支,根据实际情况修改)
3. 在应用的composer.json里配置path仓库指向这个本地目录:
{ "repositories": [ { "type": "path", "url": "./packages/your-vendor/your-package" } ], "require": { "your-vendor/your-package": "*" } }
- 运行
composer update让应用加载本地包。 - 当你修改
packages目录下的包代码后,可以单独提交到包的独立仓库:
git subtree push --prefix=packages/your-vendor/your-package git@your-git-host/your-vendor/your-package.git main
这种方式下,包的代码既在应用中可被依赖,又能独立管理Git版本,完全避开了Submodule的复杂链接问题。
方案三:本地私有Composer仓库(适合团队协作)
如果是团队开发,可以搭建一个本地私有Composer仓库(比如用satellite或类似工具),把你的包发布到这个私有仓库,应用通过私有仓库拉取包。这种方式更接近生产环境的依赖管理流程,但个人开发的话前两种方案更轻量。
内容的提问来源于stack exchange,提问作者user1032531
相关产品推荐
相关产品推荐

