[Feature] 支持为已安装的 SDK 版本添加别名/重命名功能
背景
在日常开发中,我使用 vfox 管理多个 SDK 版本,包括 Java、Node.js、Go 等。随着项目积累,我发现一个常见但棘手的问题:同一个版本号的不同发行版(distribution)难以区分。
以 Java 为例,版本号 17.0.9 对应多种发行版:
$ vfox list java
17.0.9-tem (Eclipse Temurin)
17.0.9-zulu (Azul Zulu)
17.0.9-open (OpenJDK)
17.0.9-graal (GraalVM)
虽然 vfox 在安装时使用了 sdk-name@version-dist 的命名规范,但在以下场景中仍然存在痛点:
痛点 1:版本号过长,切换不便
# 每次都要输入完整名称
vfox use java@17.0.9-tem
vfox use java@21.0.1-graal
痛点 2:记住发行版后缀的心智负担
开发者需要记住每个版本的发行商缩写(tem、zulu、open、graal 等),尤其是当多个项目使用不同发行版时。
痛点 3:团队协作时版本标识不统一
不同开发者可能使用相同的版本号但不同的发行版:
| 开发者 |
实际安装版本 |
写入 .tool-versions 的内容 |
| 开发者 A |
17.0.9-tem |
java 17.0.9-tem |
| 开发者 B |
17.0.9-zulu |
java 17.0.9-zulu |
虽然功能上可能兼容,但写入 .tool-versions 文件的字符串不同,导致版本管理混乱。
期望的功能
我希望 vfox 能支持为已安装的 SDK 版本设置用户自定义别名(alias),类似于 Git 的 git alias 或 Docker 的 image tag 功能。
基础用法
# 为已安装的版本设置别名
vfox alias java@17.0.9-tem java17-temurin
vfox alias java@21.0.1-graal java21-graalvm
# 为同一版本设置多个别名(可选)
vfox alias java@17.0.9-tem jdk17 default-java
# 查看所有别名
vfox alias list
# 删除别名
vfox alias remove java17-temurin
# 使用别名切换版本
vfox use java17-temurin
vfox use jdk17
# 在 .tool-versions 文件中使用别名
echo "java jdk17" > .tool-versions
期望的行为
-
别名仅用户本地生效:别名不应影响团队共享的 .tool-versions 文件,仅用于简化个人操作
-
别名的持久化存储:别名配置应保存在用户目录(如 ~/.version-fox/aliases.json),不在项目内共享
-
别名的优先级:当别名与实际版本名冲突时,应优先解析为别名,并给出警告提示
-
别名的迁移支持:当卸载 SDK 版本时,对应的别名也应被清理或标记为无效
使用场景
场景 1:为常用版本设置简短别名
# 设置简短别名
vfox alias java@17.0.9-tem j17
vfox alias java@21.0.1-tem j21
# 日常切换更高效
vfox use j17
vfox use j21
场景 2:统一不同开发者的本地版本标识
| 开发者 |
实际安装版本 |
本地别名 |
.tool-versions 中的记录 |
| 开发者 A |
17.0.9-tem |
team-java17 |
java team-java17 |
| 开发者 B |
17.0.9-zulu |
team-java17 |
java team-java17 |
虽然底层使用不同发行版,但通过别名实现了团队层面的统一标识。
场景 3:为实验性版本添加备注
# 安装一个预览版并添加备注性别名
vfox install java@22-ea
vfox alias java@22-ea java22-preview-test
# 标记不稳定的版本
vfox alias java@21-rc jdk21-rc-dont-use
与其他功能的协同
| 功能 |
协同说明 |
vfox cd <sdk> |
别名应能用于 vfox cd 命令,如 vfox cd j17 进入该版本的安装目录 |
vfox list |
列表显示时,应在版本号旁标注已设置的别名 |
.tool-versions |
支持在项目配置文件中使用别名(需团队约定别名的含义) |
必要性总结
| 视角 |
现状 |
期望 |
| 个人开发者 |
每次要输入完整的 sdk@version-dist |
使用简短别名快速切换 |
| 团队协作 |
不同发行版导致 .tool-versions 不统一 |
通过本地别名屏蔽底层差异 |
| 版本实验 |
难以标记特殊用途的版本 |
通过别名添加备注性标识 |
核心价值:提升日常使用效率,降低版本管理的心智负担,同时保持与现有生态的兼容性。
技术可行性参考
已有类似实现可供参考:
- Git alias:
git config --global alias.co checkout
- Docker tag:
docker tag <image-id> <new-tag>
- nvm alias:
nvm alias default 18.17.0
- sdkman alias:
sdk default java 17.0.9-tem
vfox 可以借鉴这些成熟方案的设计,实现符合自身生态的别名系统。
相关命令参考(当前 vfox 已有)
# 查看已安装版本
vfox list <sdk-name>
# 切换版本
vfox use <sdk-name>@<version>
# 查看当前版本路径(支持别名后将受益)
vfox cd <sdk-name> # 当前版本的安装目录
总结
这个功能将为 vfox 带来更灵活的用户体验,让版本管理更加个性化和高效。
感谢 vfox 团队的关注与考虑!
[Feature] 支持为已安装的 SDK 版本添加别名/重命名功能
背景
在日常开发中,我使用 vfox 管理多个 SDK 版本,包括 Java、Node.js、Go 等。随着项目积累,我发现一个常见但棘手的问题:同一个版本号的不同发行版(distribution)难以区分。
以 Java 为例,版本号
17.0.9对应多种发行版:虽然 vfox 在安装时使用了
sdk-name@version-dist的命名规范,但在以下场景中仍然存在痛点:痛点 1:版本号过长,切换不便
# 每次都要输入完整名称 vfox use java@17.0.9-tem vfox use java@21.0.1-graal痛点 2:记住发行版后缀的心智负担
开发者需要记住每个版本的发行商缩写(tem、zulu、open、graal 等),尤其是当多个项目使用不同发行版时。
痛点 3:团队协作时版本标识不统一
不同开发者可能使用相同的版本号但不同的发行版:
.tool-versions的内容17.0.9-temjava 17.0.9-tem17.0.9-zulujava 17.0.9-zulu虽然功能上可能兼容,但写入
.tool-versions文件的字符串不同,导致版本管理混乱。期望的功能
我希望 vfox 能支持为已安装的 SDK 版本设置用户自定义别名(alias),类似于 Git 的
git alias或 Docker 的image tag功能。基础用法
期望的行为
别名仅用户本地生效:别名不应影响团队共享的
.tool-versions文件,仅用于简化个人操作别名的持久化存储:别名配置应保存在用户目录(如
~/.version-fox/aliases.json),不在项目内共享别名的优先级:当别名与实际版本名冲突时,应优先解析为别名,并给出警告提示
别名的迁移支持:当卸载 SDK 版本时,对应的别名也应被清理或标记为无效
使用场景
场景 1:为常用版本设置简短别名
场景 2:统一不同开发者的本地版本标识
.tool-versions中的记录17.0.9-temteam-java17java team-java1717.0.9-zuluteam-java17java team-java17虽然底层使用不同发行版,但通过别名实现了团队层面的统一标识。
场景 3:为实验性版本添加备注
与其他功能的协同
vfox cd <sdk>vfox cd命令,如vfox cd j17进入该版本的安装目录vfox list.tool-versions必要性总结
sdk@version-dist.tool-versions不统一核心价值:提升日常使用效率,降低版本管理的心智负担,同时保持与现有生态的兼容性。
技术可行性参考
已有类似实现可供参考:
git config --global alias.co checkoutdocker tag <image-id> <new-tag>nvm alias default 18.17.0sdk default java 17.0.9-temvfox 可以借鉴这些成熟方案的设计,实现符合自身生态的别名系统。
相关命令参考(当前 vfox 已有)
总结
这个功能将为 vfox 带来更灵活的用户体验,让版本管理更加个性化和高效。
感谢 vfox 团队的关注与考虑!