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