V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
moqsien
V2EX  ›  推广

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

  •  
  •   moqsien · 16 天前 · 635 次点击

    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 也支持。实现上略有差异。

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

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

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

    目前不支持 gcc 和 glibc 版本管理。
    fenglangjuxu
        10
    fenglangjuxu  
       5 天前
    群主有交流群之类的么 想安装一个 golang 的低版本 但是没有 怎么能自己给加上呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3757 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:42 · PVG 18:42 · LAX 03:42 · JFK 06:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.