如何使用composer在团队中开发PHP包?

时间:2015-05-18 00:11:25

标签: php git composer-php

简介

这是一个相当冗长的问题,我在标题中提出的问题可能含糊不清,我可能会将其更改为更合适的问题。

类似的问题已经被提出并回答here,尽管我认为这完全没有回答这个问题。

概要

我正在与项目的开发团队合作。我们正在使用一个框架(为了论证 - 框架是无关紧要的),除了其中一个要求是我们使用

这些软件包基本上是从应用程序和彼此解耦,但是一个软件包可能依赖于另一个软件包。

这些软件包有自己的存储库,在开发应用程序期间,分支别名设置为dev-master

问题#1

为了使应用程序能够使用我的包,我需要用composer.json注册它们,这是好的,直到我必须将我的包开发的现有工作提交到它们的存储库才能运行{{1 }}

问题#2

我已经提交了初始包体系结构和composer update。我运行composer.json完成,我的包可供应用程序使用。然而,我继续开发此包,同时另一个开发人员已经对此包提交了不同的更改 - 即修复错误。

我需要更新另一个软件包以便我的工作继续进行,但我不能这样做,因为这样做会发出类似的警告:

composer update

如果我回复Loading composer repositories with package information Updating dependencies (including require-dev) - Removing hu/admin (dev-master) The package has modified files: M composer.json M src/... Discard changes [y,n,v,?]? ,我的变化就会被吹走并永远消失。如果我选择y作曲家被中止,而我的项目因为包裹没有与我的更改并行更新而中断。

问题#3

这种开发方式的另一个问题是,如果我在n之外处理我的包并且我提交了我的更改,我可以运行vendor但是我的应用程序由于致命错误而被破坏。我修复了丢失的composer update或其他小语法错误。我提交此更改并运行; - 但我不希望我的git历史记录中包含很少的拼写错误修复和解析错误修复,因为我无法在应用程序中与我的应用程序并行运行应用程序和其他软件包或此软件包上的开发/开发人员。

问题#4

我在GuitHub上发现了一个名为franzliedke/studio的软件包,它似乎解决了我的问题。一旦包由于完整/功能而被发布,这就不能保留在composer update目录中,导致初始问题再次出现。

结论

我想知道解决这个或任何最佳实践的最佳方法,以便与开发人员团队一起处理包,而不必在每次运行vendor/bin之前提交所有内容。

确实有一个非常酷的工作台功能。但是从5.0版本中删除了那么糟糕的做法?

1 个答案:

答案 0 :(得分:3)

这就是我们在由几个同时开发的小作曲家组件组成的大型项目中所做的事情:

将所有组件分开放在他们自己的命名空间和目录结构中,就像描述in the other answer your mentioned一样开发你的应用程序。

/Application
-composer.json (Application json)
-/src
--/Component1
----composer.json (Component json)
--/Component2
----composer.json (Component json)
--/ApplicationFeature
----Class1.php
----Class2.php

整个应用程序是在一个git存储库中开发的,可以消除上述大多数问题。然后偶尔使用git subtree将应用程序存储库拆分为单个组件存储库。我写了一个小的php cli脚本,它将项目拆分为更小的组件并将它们推送到相应的组件存储库。与git子模块相比,有许多优点。保留组件的整个提交历史记录并将其推送到组件存储库。 More information on subtrees here 如果您有兴趣请告诉我,我很高兴分享分割/标记的脚本,最后通过将directory <-> componentName映射定义为json来推送单个组件。