简介
这是一个很长的问题,我在标题中问的问题可能很模糊,我可能会把它改成更合适的问题。
这里已经提出并回答了类似的问题,尽管我认为这并不能完全回答这个问题。
简介
我正在与一个项目的开发团队合作。我们使用的是一个框架(为了论证起见,这个框架无关紧要(,但其中一个要求是我们使用composer。
这些包本质上是与应用程序和彼此解耦的,但是一个包可能依赖于另一个包。
这些包有自己的git存储库,在应用程序开发过程中,分支别名设置为dev-master
。
问题#1
为了让应用程序使用我的包,我需要向composer.json
注册它们,这很好,直到我必须将包开发的现有工作提交到它们的存储库中,然后才能运行composer update
。
问题#2
我已经提交了最初的包架构和composer.json
。我运行composer update
,它完成了,我的包可用于应用程序。然而,我在继续开发这个包的同时,另一位开发人员已经对这个包进行了不同的更改,即bug修复。
我需要更新另一个包才能继续我的工作,但我不能,因为这样做会发出类似于的警告
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
,composer将被中止,并且我的项目由于一个包没有与我的更改并行更新而中断。
问题#3
这种开发方式的另一个问题是,如果我在vendor
之外处理我的包,并且我提交了我的更改,我可以运行composer update
,但我的应用程序由于致命错误而损坏。我修复了丢失的;
或其他小语法错误。我提交了这个更改并运行了composer update
,但我不希望我的git历史记录中充满了一些打字错误修复和解析错误修复,因为我不能在应用程序中与应用程序和其他包或此包上的其他开发/开发人员并行地处理我的包。
问题#4
我在GuitHub上发现了一个名为franzliedke/studio的软件包,它似乎部分解决了我的问题。一旦一个包由于完整/功能性而发布,它就不能保留在vendor/bin
目录中,从而导致最初的问题再次出现。
结论
我想知道解决这个问题的最佳方法或任何最佳实践,以便与开发团队一起开发包,而不必每次在运行composer update
之前都提交所有内容。
laravel确实有一个非常酷的工作台特性。但是从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
将应用程序回购拆分为单个组件存储库。我写了一个小的php-cli脚本,它将项目拆分为更小的组件,并将它们推送到相应的组件存储库。与git子模块相比有很多优点。组件的整个提交历史记录将被保存并推送到组件存储库。有关子树的详细信息,请点击此处如果你感兴趣,请告诉我,我很乐意分享这个脚本,它通过将directory <-> componentName
映射定义为json来拆分/标记并最终推送单个组件。