Skip to content

[Feature]: 支持为已安装的 SDK 版本添加别名/重命名功能 #670

@YanzMing

Description

@YanzMing

[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

期望的行为

  1. 别名仅用户本地生效:别名不应影响团队共享的 .tool-versions 文件,仅用于简化个人操作

  2. 别名的持久化存储:别名配置应保存在用户目录(如 ~/.version-fox/aliases.json),不在项目内共享

  3. 别名的优先级:当别名与实际版本名冲突时,应优先解析为别名,并给出警告提示

  4. 别名的迁移支持:当卸载 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 aliasgit config --global alias.co checkout
  • Docker tagdocker tag <image-id> <new-tag>
  • nvm aliasnvm alias default 18.17.0
  • sdkman aliassdk default java 17.0.9-tem

vfox 可以借鉴这些成熟方案的设计,实现符合自身生态的别名系统。

相关命令参考(当前 vfox 已有)

# 查看已安装版本
vfox list <sdk-name>

# 切换版本
vfox use <sdk-name>@<version>

# 查看当前版本路径(支持别名后将受益)
vfox cd <sdk-name>   # 当前版本的安装目录

总结

这个功能将为 vfox 带来更灵活的用户体验,让版本管理更加个性化和高效。

感谢 vfox 团队的关注与考虑!

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions