多运行时版本管理器vfox v1.0.0发布了~

前言

vfox已经2年了,中间我也经历了裁员,并没有花太多精力去维护和宣传,非常感谢社区各位小伙伴的贡献和维护,也感谢各位佬友们的支持~

最近我重新审视了项目,决定花时间彻底解决vfox遗留多时的核心问题。

适合vfox的版本管理方案

版本管理工具的本质是对PATH环境变量的管理。目前常见的方案可以归为两类:纯PATH(绝对路径)、Shim(shell脚本包装/软链)

vfox从早期版本分别使用过这两种方案,但结果都不够理想。结合vfox作用域的功能及限制,最终决定采用:符号链接+PATH操作的混合策略。

这种方案既保留了两种方式的优势,又规避了各自的缺陷,是我认为目前最适合通用版本管理器的解决方案。ps:有些问题没有绝对的解决,但是可以相对缓解~

具体实现细节请查看下方内容。

核心改进:解决临时目录问题

问题背景

在v1.0.0之前,无论使用session、global还是project作用域,所有SDK都会存储在临时目录中。这导致当shell关闭后,之前配置的版本信息立即失效,造成虚拟环境和CI流程中出现"目录不存在"的错误。

v1.0.0方案

本版本将三个作用域的行为彻底拆分,采用更加合理的管理策略:

Project作用域(项目级)

在当前项目目录下自动生成.vfox/sdks/软链
将项目路径加入PATH,实现项目隔离
可选参数:--unlink禁用此行为(不推荐)
建议:将生成的.vfox/目录添加到.gitignore

Session作用域(会话级)

保持原有行为,SDK存储在临时目录中
与shell生命周期绑定,关闭shell自动清理

Global作用域(全局)

在~/.vfox/sdks/下生成永久软链
指向实际的SDK版本目录
跨shell会话保持有效

优先级规则

通过PATH环境变量控制优先级,从高到低依次为:

Project > Session > Global > System

$PWD/.vfox/sdks/nodejs/bin:~/.vfox/tmp//nodejs/bin:~/.vfox/sdks/nodejs/bin:/usr/bin:...

具体用法请参考文档

其他功能

新配置格式支持

引入vfox.toml和.vfox.toml新配置格式,提供更清晰的配置体验
完全兼容旧版.tool-versions格式,确保平滑迁移

多用户支持

支持多用户场景,每个用户拥有独立配置空间
支持全局配置和SDK安装,便于团队环境统一管理

Exec命令

新增exec命令,允许在指定SDK版本下执行任意命令
完美支持CI/CD流程和VSCode集成
用法示例:vfox x nodejs@20 -- node -v

其他更多改进,请看release

官网:https://vfox.dev/
仓库:GitHub - version-fox/vfox: A cross-platform and extendable version manager with support for Java, Node.js, Golang, Python, Flutter, .NET & more

4 posts - 4

via - (author: Han Li)

标签: none

评论已关闭