SDK 版本管理器之 vmr 和 vfox 对比

210 天前
 moqsien

vfox 是 2023 年底出现的一款用 go 编写的 SDK 版本管理器,由 hellogithub 引流而被大家了解。目前正致力于模仿基于 shell 脚本的版本管理器 asdf-vm 。

https://github.com/version-fox/vfox

vmr 是 2024 年 3 月发布的一款用 go 编写的 SDK 版本管理工具,无需插件,开箱即用,同样支持多种语言,覆盖面广。

https://github.com/gvcgo/version-manager

下面比较一下二者的差异和优势。

1 、架构方面:

vfox 应该是从 neovim 、g(一款国内程序员写的 go 语言版本管理器)、nvm 、asdf-vm 获取的灵感。它引入 lua 运行时,将版本爬虫部分塞进 lua 脚本中,作为插件系统,一种语言对应一个插件。想要管理某种语言的 SDK ,就需要安装对应的插件。这种方式对 vfox 本身而言,带来了一定复杂度。主要在于爬虫往往不能够统一,往往插件和主程序需要一起修改,比较麻烦,也不够稳定。好处是,更多的用户可以通过编写 lua 插件的方式参与项目维护。

vmr 放弃了插件模式。而是剥离了版本爬虫部分,将版本爬虫单独部署在服务器,定时获取版本信息,预处理成统一格式,并同步到版本仓库。vmr 主程序只需获取版本仓库中的 SDK 版本信息,即可方便地展示给用户。这样做可以充分保证 vmr 主程序的稳定性,即使遇到 SDK 列表页面改版或者不稳定之类的情况,也能不受影响。同时,爬虫部分也可以集中精力做更为擅长的部分,因此 vmr 可以方便地获取到 vfox 目前难以抓到的只在 github release 发布的 SDK 或者工具。当然,vmr 的这种设计有一个缺点,就是最新版本可能有延迟。但是,鉴于一般情况下,SDK 更新的频率并不是很高,每天 2 次的同步频率已经可以满足绝大多数需求。

所以,在架构方面,如果你追求稳定,快速,可以选择 vmr 。如果你追求将来更多样化的插件支持,可以选择 vfox 。

2 、UI 方面

vfox 目前是简单的 TUI ,基于 pterm 。

vmr 的 TUI 基于 bubbletea ,在列表展示,下载进度条方面更美观。支持类似 vim 的按键操作遍历展示列表。还能根据选择的列表项目,自动生成下一步的命令并放入系统剪贴板,用户只需粘贴即可。大大减少了用户输入。用户也可以自行编辑粘贴后的命令,这样也保证了灵活性。

3 、下载速度方面

vfox 目前没提到多线程下载。

vmr 支持开启多线程下载,如果源网站支持多线程下载的话。另外,vmr 还能设置反向代理(vmr 免费提供),用于加速 github 项目的 release 内容的下载。

4 、支持广度方面

vfox 目前仅仅支持编程语言相关的 SDK ,也有少量其他工具,例如 etcd 等。vfox 有个优势的地方,就是它支持需要编译的 SDK ,但是编译需要特定的系统环境前提。

vmr 目前支持几乎所有 vfox 支持的 SDK ,但少数需要编译的除外。另外,vmr 还支持很多流行的其他 SDK 或工具,例如 bun(一个很火的 js/ts 运行时), protoc ,kubectl, neovim, vscode, lazygit, git-for-windows, vlang, v-analyzer, typst, typst-lsp, odin, upx, asciinema 等等。可以真正做到从零构建开发环境。这些 SDK 或工具很多目前只能从 github release 中获取,目前的 vfox 还无法做到。

5 、版本管理器功能方面

vfox 支持 global, session, project 三种范围模式。

vmr 也支持。实现上略有差异。

1292 次点击
所在节点    推广
11 条回复
zeromake
209 天前
我看了一下,https://github.com/gvcgo/resources 这个就是爬虫爬下来的数据是吧,vmr 是如何更新这个数据库的呢?
是直接 embed 到代码里一份,还是安装时初始化一份在本地,然后每次执行时检查是否有新的然后更新?
moqsien
209 天前
@zeromake vmr 不负责更新这个仓库。另外的程序负责这一块。用户对这个无感知。
zeromake
209 天前
@moqsien 那就是每次都拉取最新的?
moqsien
209 天前
@zeromake 是的。如果本地缓存这些的话,也没法判断是否有更新。所以每次都去缓存仓库获取就行了。这比现爬现用要快很多,因为只需要一次请求就够了。
zeromake
209 天前
@moqsien
不过和 vfox 比起来也不算什么缺点了,毕竟拉取自己准备的肯定要比直接爬要快的多,不过这种工具大概率只有程序员在用,除非我电脑上的 vfox 挂了或者没有对应的语言支持,我也不会换一个新的,或者说是新系统才会用
moqsien
209 天前
@zeromake 喜欢折腾的可以试试 vmr 。已经用了 vfox ,并且满足自己日常需要的,又不想折腾的,那没必要换。
einsdisp
206 天前
@moqsien

1. 例如 cpython 这种, 没有官方的 linux 的二进制发布, vmr 是下载源码本机编译(类似 pyenv),还是直接下载预编译的二进制(类似 conda),如果是后者,这个预编译的版本是如何编译的,哪些编译参数,用你自己机器编译的还是 github actions 编译或其它机器编译的?如果确保安全性?

2.如果是 golang, node 这种有官方二进制发布的,vmr 是直接从官方网站下载官方的二进制版本,而非另行编译?
einsdisp
206 天前
@einsdisp
3. 能管理 gcc, glibc 的不同版本吗?
moqsien
206 天前
@einsdisp vmr 都是下载二进制文件,不进行编译。因为编译并不能保证 100%通过。

目前不支持 gcc 和 glibc 版本管理。
fenglangjuxu
198 天前
群主有交流群之类的么 想安装一个 golang 的低版本 但是没有 怎么能自己给加上呢
zeromake
190 天前
@moqsien
我今天发现还有一个重大问题……,我想要的时候记不起来名字……,version-manager 只能搜出各路 nvm 之类的东西,vmr 只能搜出一堆 vm 的东西,但是 vfox 我能记得住并且搜的到

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1036639

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX