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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions