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

182 天前
 Sunrisepeak

基本介绍

一个简单且通用的版本管理工具。 可以注册目标工具版本到 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-全局模式

2-local 模式

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

开源地址

2689 次点击
所在节点    分享创造
7 条回复
Sunrisepeak
182 天前
目前还是初步的版本。欢迎大家尝试, 或给出一些开发/改进方向上的建议...
ITisCool
182 天前
就先照 asdf 包含完它的所有功能好了。不过 asdf 最近也用 golang 重写了,用 rust 写一个性能应该也不会占太大优势。
Sunrisepeak
181 天前
@ITisCool 目前包管理 和 版本管理是拆分开来做的。版本管理算是通用的可以适配包管理器或个人的软件工具也可以用户自定义, 如果包管理器 XIM + XVM 结合就有点像 asdf 这种[软件安装 + 版本管理]组合的感觉。只不过目前包管理的索引库中工具/软件还比较少 https://github.com/d2learn/xim-pkgindex
kalago
181 天前
https://github.com/jdx/mise
不是已经有了 rust 的多语言多版本管理,重复造轮子吗。
Sunrisepeak
180 天前
@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
178 天前
用了 vfox 就干掉了其他 sdk 切换安装工具了
Sunrisepeak
177 天前
@zeromake vfox 做的很不错, 也是跨平台的

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

https://ex.noerr.eu.org/t/1105944

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

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

© 2021 V2EX