爱意满满的作品展示区。
Sunrisepeak

开源 XVM: 用 rust 写了一个跨平台&通用的多版本管理工具 - 支持(自定义)命令别名、多版本共存/管理、工作空间/环境隔离 (适配所有安装来源) - 前期阶段欢迎交流讨论

  •  
  •   Sunrisepeak ·
    Sunrisepeak · Jan 17, 2025 · 3547 views
    This topic created in 506 days ago, the information mentioned may be changed or developed.

    基本介绍

    一个简单且通用的版本管理工具。 可以注册目标工具版本到 xvm 数据库, 也可搭配 xim 包管理器(自动安装注册)进行使用

    多版本切换及工作空间命令演示

    利用工作空间机制, 支持自动版本切换(以 node 为例)

    speak@speak-pc:~/test/xvm$ node --version
    v22.12.0
    speak@speak-pc:~/test/xvm$ xvm list node # 查看所有版本
    23.6.0
    22.12.0
    
    speak@speak-pc:~/test/xvm$ xvm use node 23.6.0 # 切换到 23.6.0
    using -> target: node, version: 23.6.0
    speak@speak-pc:~/test/xvm$ node --version # 验证版本
    v23.6.0
    speak@speak-pc:~/test/xvm$ xvm current node # 显示版本信息(xvm 下有个 test 工作空间配置)
    
    	[[test + global]]
    
    node:	23.6.0
    nodejs:	23.6.0	 -->  [node]
    
    all targets added
    
    speak@speak-pc:~/test/xvm$ cd .. # 返回上级目录(自动切换到全局空间)
    speak@speak-pc:~/test$ node --version # node 版本已经变成了 22
    v22.12.0
    speak@speak-pc:~/test$ xvm current node # 查看当前版本情况
    
    	[[global]]
    
    node:	22.12.0
    nodejs:	23.6.0	 -->  [node]
    
    all targets added
    
    speak@speak-pc:~/test$ cd xvm # 再次进入 xvm 目录(node 会自动变成 test 工作空间的版本
    speak@speak-pc:~/test/xvm$ node --version
    v23.6.0
    speak@speak-pc:~/test/xvm$ 
    
    

    三种使用模式

    1-全局模式

    • 全局工作空间
    • 支持使用注册/移除不同版本
    • 支持版本切换/及别名设置
    • 支持一键关闭或开启 xvm 对宿主系统的影响

    2-local 模式

    • 基于目录的工作空间
    • 工作空间继承控制(不继承及和全局版本进行隔离)
    • 工作空间激活状态控制
    • 工作空间配置可以编辑(一般用于项目控制版本)
    • 记录使用版本并导出工作空间配置文件

    3-自定义工作空间 - (计划开发中)

    • 自定义工作空间且目录无关 (一般用于特定版本配置组合记录)
    • 其他功能类似 local

    开源地址

    7 replies    2025-01-22 13:36:18 +08:00
    Sunrisepeak
        1
    Sunrisepeak  
    OP
       Jan 17, 2025
    目前还是初步的版本。欢迎大家尝试, 或给出一些开发/改进方向上的建议...
    ITisCool
        2
    ITisCool  
       Jan 17, 2025
    就先照 asdf 包含完它的所有功能好了。不过 asdf 最近也用 golang 重写了,用 rust 写一个性能应该也不会占太大优势。
    Sunrisepeak
        3
    Sunrisepeak  
    OP
       Jan 18, 2025
    @ITisCool 目前包管理 和 版本管理是拆分开来做的。版本管理算是通用的可以适配包管理器或个人的软件工具也可以用户自定义, 如果包管理器 XIM + XVM 结合就有点像 asdf 这种[软件安装 + 版本管理]组合的感觉。只不过目前包管理的索引库中工具/软件还比较少 https://github.com/d2learn/xim-pkgindex
    kalago
        4
    kalago  
       Jan 18, 2025
    https://github.com/jdx/mise
    不是已经有了 rust 的多语言多版本管理,重复造轮子吗。
    Sunrisepeak
        5
    Sunrisepeak  
    OP
       Jan 19, 2025
    @kalago 看了一下 mise 的介绍, 有一些实现策略是类似的。但当前发展理念稍微有一些不同。感觉 mise 更偏向其他版本管理工具做为后端来做实际支撑, 在前端通过 mise 来实现一致的使用体验。xvm 也有这方面的考虑, 但是总体可能比 mise 还要更加偏向作为版本管理工具的抽象层工具来设计的, 使用侧和注册侧都接口标准化(这个注册不是指插件)。所以甚至可以把 xvm 当作一个模块放到自己项目当中做项目版本管理层来使用。例如:

    xvm + 把版本管理工具视为插件开发 -> 就会有点像 mise
    xvm + 把具体软件/工具视为插件开发 -> 就会有点像 vfox/asdf (xvm + xim 类似这种)

    目前 xvm 是分 xvm-bin + xvm-lib 的方式进行开发的, 目标是尽可能的通用标准化 使用接口和注册接口, 这样它就可以

    - 个人可以按自己习惯去做一些管理版本/记录
    - 工具开发者也可以把它作为自己工具的版本管理模块
    - 包管理器开发者可以用其做多版本管理模块...
    - 团队/项目也可以用...

    总体, 其实就是 "只做版本管理/切换/环境隔离 不做具体的软件安装和卸载的工作"
    (关于 mise 我没有具体使用过, 可能理解有偏差, 主要是看了这个 https://mise.jdx.dev/plugins.html)
    zeromake
        6
    zeromake  
       Jan 21, 2025
    用了 vfox 就干掉了其他 sdk 切换安装工具了
    Sunrisepeak
        7
    Sunrisepeak  
    OP
       Jan 22, 2025
    @zeromake vfox 做的很不错, 也是跨平台的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5634 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 01:34 · PVG 09:34 · LAX 18:34 · JFK 21:34
    ♥ Do have faith in what you're doing.