繁体   English   中英

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

[英]How to develop PHP packages in a team using composer?

介绍

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

虽然我不认为这完全回答了这个问题,但在这里已经提出并回答类似的问题。

概要

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

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

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

问题#1

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

问题#2

我已经提交了初始包体系结构和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我的变化交口称赞,并永远失去了。 如果我选择n作曲家被中止并且我的项目因为一个包没有与我的更改并行更新而被破坏。

问题#3

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

问题#4

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

结论

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

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

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

您在上面提到的另一个答案中所描述的那样开发您的应用程序,只需将所有组件保持在自己的命名空间和目录结构中即可。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM