开源 XVM: 用 rust 写了一个跨平台&通用的多版本管理工具 - 支持(自定义)命令别名、多版本共存/管理、工作空间/环境隔离 (适配所有安装来源) - 前期阶段欢迎交流讨论 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Sunrisepeak
V2EX    分享创造

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

  •  
  •   Sunrisepeak
    Sunrisepeak 267 天前 2877 次点击
    这是一个创建于 267 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基本介绍

    一个简单且通用的版本管理工具。 可以注册目标工具版本到 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 条回复    2025-01-22 13:36:18 +08:00
    Sunrisepeak
        1
    Sunrisepeak  
    OP
       267 天前
    目前还是初步的版本。欢迎大家尝试, 或给出一些开发/改进方向上的建议...
    ITisCool
        2
    ITisCool  
       266 天前
    就先照 asdf 包含完它的所有功能好了。不过 asdf 最近也用 golang 重写了,用 rust 写一个性能应该也不会占太大优势。
    Sunrisepeak
        3
    Sunrisepeak  
    OP
       266 天前
    @ITisCool 目前包管理 和 版本管理是拆分开来做的。版本管理算是通用的可以适配包管理器或个人的软件工具也可以用户自定义, 如果包管理器 XIM + XVM 结合就有点像 asdf 这种[软件安装 + 版本管理]组合的感觉。只不过目前包管理的索引库中工具/软件还比较少 https://github.com/d2learn/xim-pkgindex
    kalago
        4
    kalago  
       266 天前
    https://github.com/jdx/mise
    不是已经有了 rust 的多语言多版本管理,重复造轮子吗。
    Sunrisepeak
        5
    Sunrisepeak  
    OP
       265 天前
    @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  
       263 天前
    用了 vfox 就干掉了其他 sdk 切换安装工具了
    Sunrisepeak
        7
    Sunrisepeak  
    OP
       262 天前
    @zeromake vfox 做的很不错, 也是跨平台的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2657 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 13:58 PVG 21:58 LAX 06:58 JFK 09:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86