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 也支持。实现上略有差异。
1
zeromake 236 天前
我看了一下,https://github.com/gvcgo/resources 这个就是爬虫爬下来的数据是吧,vmr 是如何更新这个数据库的呢?
是直接 embed 到代码里一份,还是安装时初始化一份在本地,然后每次执行时检查是否有新的然后更新? |
5
zeromake 236 天前
@moqsien
不过和 vfox 比起来也不算什么缺点了,毕竟拉取自己准备的肯定要比直接爬要快的多,不过这种工具大概率只有程序员在用,除非我电脑上的 vfox 挂了或者没有对应的语言支持,我也不会换一个新的,或者说是新系统才会用 |
7
einsdisp 233 天前
@moqsien
1. 例如 cpython 这种, 没有官方的 linux 的二进制发布, vmr 是下载源码本机编译(类似 pyenv),还是直接下载预编译的二进制(类似 conda),如果是后者,这个预编译的版本是如何编译的,哪些编译参数,用你自己机器编译的还是 github actions 编译或其它机器编译的?如果确保安全性? 2.如果是 golang, node 这种有官方二进制发布的,vmr 是直接从官方网站下载官方的二进制版本,而非另行编译? |
10
fenglangjuxu 225 天前
群主有交流群之类的么 想安装一个 golang 的低版本 但是没有 怎么能自己给加上呢
|