本人前端开发,目前公司项目是一套系统,每个客户都会在此基础上定制化开发,做一些样式和功能上的修改。
目前针对客户的定制化需求,我们前端是采用环境变量+条件编译的方式来管理的,但由此也产生了弊端:客户多了以后,各类编译条件错综复杂,久而久之难以阅读,不利于代码的维护。
也考虑过每个客户单独拉一个分支出来,在主分支上更新代码,每次更新都合并到其他定制化分支出来,这样也清晰明了,但这种方法容易产生代码冲突,每次合并的时候都需要花时间解决代码冲突。
所以想问问 V 站的大家一般这种情况是如何进行版本控制的呢?
1
340244120w 2022-08-29 08:44:26 +08:00 via iPhone
分支合并冲突这个也不是问题啊。都定制开发了,方法一也有冲突,而且比单纯合并冲突还复杂吧。
首先开分支这个是肯定了的。其次代码本身尽量为扩展留点插口啥的,尽量把定制化需求的代码隔离出来。 |
2
Dkngit 2022-08-29 09:16:14 +08:00
分支发现不怎么好管理,有点想要每个甲方 fork 一个仓库出来。
|
3
abvatous 2022-08-29 10:57:24 +08:00
插个眼
定制开发的,发现很多代码都需要分开隔离 /要么就是每个客户就是一次 checkout branch 求个优雅的管理定制化代码版本管理方法 |
4
Felldeadbird 2022-08-29 11:53:06 +08:00
1. 分支、分版本仓库进行管理。 手动同步版本。
2. 把定制功能插件化。其余一律和主版本一致。 你们已经定制开发了,就不要追求每个客户源码都和最新版一致了。 |
5
ZxBing0066 2022-08-29 11:56:24 +08:00 1
核心功能做成通用包,定制化功能做成外层,调用通用包。
通用包通过 API 兼容保证升级不会出现问题,各定制化间没必要耦合。 如果有无法兼容的大更新可增加通用包版本,定制版本选择合适的版本进行定制。 |
6
Kei001 OP @Felldeadbird @ZxBing0066 主要是前端页面需要定制,比方说部分页面的布局样式要调整,功能增减这样,并非是后端 API 差异,这个如何插件化?
|
7
civetcat 2022-08-29 12:47:11 +08:00
我们也碰到这个问题、现在是多每个定制版本开一个分支。然后同步用 cherry-pick. 如果定制分支多了,也是相当不可控,经常忘记同步,代码冲突等问题。我还想着用环境变量的方式,切换不同的路由会不会好一点,但是前提需要 import 所有的文件了。或者编译层面的环境变量,通过 webpack alias 就能在不同情况下 import 到对应的路由文件。
|
8
xujinkai 2022-08-29 13:01:47 +08:00
等高手。
我们目前是分支的方式,但更新的时候就很难受。 如果是环境变量的方式,不是所有代码都能插件化的,你永远猜不到下一个客户想定制什么东西,最终代码会各种条件判断。 也许没法两全其美,必须做取舍。 |
9
ZxBing0066 2022-08-29 13:53:56 +08:00
@Kei001 模块分层,通用模块毫无定制性; UI 模块,提供部分定制选项;最外层按需套皮咯。
|