liwl
2024-03-07 10:26 deepin
好了,紧箍咒,又多一咒
Reply Like 2 View the author
好了,紧箍咒,又多一咒
--- 我们有14个包管理器了,我们有必要做一个终极的包管理器来终结一切混乱
一段时间后
--- 我们有15个包管理器了,我们有必要做一个终极的包管理器来终结一切混乱
--- 我们有14个包管理器了,我们有必要做一个终极的包管理器来终结一切混乱
一段时间后
--- 我们有15个包管理器了,我们有必要做一个终极的包管理器来终结一切混乱
真理啊
小白好奇,真的有程序员有超过3种语言的版本管理需求吗?
小白好奇,真的有程序员有超过3种语言的版本管理需求吗?
有的,为公司工作的编程语言,自己小公司接的活,是另外一个编程语言,上班时,公司和自己的活可以混着做,老板还不易发现,摸鱼神奇啊!
--- 我们有14个包管理器了,我们有必要做一个终极的包管理器来终结一切混乱
一段时间后
--- 我们有15个包管理器了,我们有必要做一个终极的包管理器来终结一切混乱
不用。我还是使用我的docker吧,每个docker容器和服务器环境是一致的,切换也更方便,生态更完善。
好使
感谢分享。
怎么不是在deepin上配置的教程,竟然是windows上……
怎么不是在deepin上配置的教程,竟然是windows上……
第5部分内容靠你尝试后替换和补全😂
哇塞,看起来不错,我试试用它来代替我的nvm
--- 我们有14个包管理器了,我们有必要做一个终极的包管理器来终结一切混乱
一段时间后
--- 我们有15个包管理器了,我们有必要做一个终极的包管理器来终结一切混乱
多少有点没绷住,哈哈哈哈哈哈哈哈哈
v23 亲测 python 可用
Popular Events
More
先来一段紧箍咒:nvm、fvm、gvm、sdkman、fnm、n、g、rvm、jenv、phpbrew、rustup、swiftenv、pyenv、rbenv...
这些都是用来解决编程语言多版本管理的工具,如果你是个程序员肯定认识或是用过几个,但是刚接触编程的小白,就会有些挠头了。
啥是编程语言版本管理工具?它们有什么用呢?
举个例子,用 Java 的开发者可能会遇见的问题,公司的项目是万年不变 JDK 8,但个人项目用的是最新的 JDK 21。这种情况下,在一台电脑上开发公司和个人项目的时候,就需要切换一下当前开发环境对应的 JDK 版本,否则项目跑不起来。编程语言版本管理工具就是用来切换/管理编程语言不同版本的工具,比如 Java 语言对应的工具是
jenv
。🤧问题来了。每一种编程语言都有一个对应的版本管理工具,对于多语言开发者来说就需要安装、配置、学习各种版本管理工具,记忆不同工具的使用命令!!那咋办啊?!!!
莫慌,今天 HelloGitHub 带来的是一款跨平台版本、支持多语言的版本管理工具——vfox,让你无忧应对多编程语言、不同版本的开发环境。
GitHub 地址:https://github.com/version-fox/vfo
该项目由国人(99 年的小伙)开发,更贴合国内开发者的使用习惯。
接下来,让我们一起走近 vfox 了解它的功能、上手使用、技术原理和强大的插件系统吧!
一、介绍
vfox 是一个类 nvm、fvm、sdkman、asdf 的版本管理工具,具有跨平台、通用、易拓展的特性:
质疑声:同类型的项目挺多的啊,不能一个国人开发、开源就来求 Star 吧?
下面,我们就来和在 GitHub 上有 20k Star 的同类型工具 asdf PK 一下,看看 vfox 是不是重复造轮子,到底能不能打!
二、对比 asdf
这里主要从操作系统兼容性、性能和插件换源三个方面进行对比。
2.1 兼容性
首先,asdf 是用 shell 脚本实现的工具,所以并不支持原生 Windows 环境。而 vfox 是用 Go + Lua 实现的,因此天生支持 Windows 和其他操作系统。
2.2 性能
上图是对两个工具最核心的切换版本功能进行基准测试的结果,很容易就能得出结论:vfox 比 asdf 快 5 倍。
技术解析:asdf 执行切换版本的速度之所以较慢,主要是由于其垫片机制。简单来说,当你尝试运行如 node 这样的命令时,asdf 会首先查找对应的垫片,然后根据
.tool-versions
文件或全局设置来确定使用哪个版本的 node 。这个查找和确定版本的过程会消耗一定的时间,从而影响了命令的执行速度。相比之下,vfox 则采用了直接操作环境变量的方式来管理版本,它会直接设置和切换环境变量,从而避免了查找和确定版本的过程。因此,在执行速度上要比使用垫片机制的 asdf 快得多。
虽然 asdf 很强,但是它对 Windows 原生无能为力。虽然 vfox 很新,但在性能和跨平台方面做得更好。
2.3 插件换源
大多数时候,我们会被网络问题而困扰,所以切换下载源的操作是必不可少的。
下面以切换 Node.js 源为例,对比 asdf 和 vfox 在换源时的区别。
asdf 是通过
asdf-vm/asdf-nodejs
插件实现了对于 Node.js 的支持,但该插件是需要手动预定义一个环境变量来修改下载源,多语言换源还需要设置多个不同的环境变量。vfox 选择了另一种方法,即一个镜像源对应一个插件。
虽然这样会使仓库的插件变多,但使用起来降低了负担,也没有乱七八糟的环境变量需要配置,对用户非常友好!
三、上手
说了这么多,还没上手玩一下简直忍不了。
3.1. 安装
Windows 用户只需要下载安装器进行安装即可,Linux 用户可以使用 APT 或 YUM 来快速安装,macOS 用户可以使用 Homebrew 安装。更详细的安装方式可查看文档
安装完成之后,需要将 vfox 挂载到你的 shell 中,从下面条目中选择一条适合你 shell 的。
3.2 使用
安装好了,但你还做不了任何事情,因为 vfox 是使用插件作为扩展,按需安装。
不知道应该添加哪些插件,可以用
vfox available
命令查看所有可用插件所以你还需要安装插件,以 Node.js 为例,为了获得更好的体验,我们添加 npmmirror 镜像源插件:
vfox add nodejs/npmmirror
。在插件成功安装之后,你就可以玩起来了!
vfox install nodejs@
vfox install nodejs@latest
vfox use nodejs[@]
文字表达远不如图片来的更直观,我们直接上效果图。
四、技术原理
vfox 支持 Global、Session、Project 三种作用域,这三种作用域能够满足我们日常开发所需的场景。
vfox use -g
vfox use -s
vfox use -p
那么你对它们的实现原理感兴趣吗?咱们废话不多说,直接看原理图!
vfox 是基于 shell 的 hook 机制实现的,hook 机制简单来说就是每当我们执行完命令之后,shell 都会调用一下你配置的钩子函数(hook),即
vfox env
命令,我们后面解释这个命令是干什么的。说回到作用域上来,vofox 是通过
.tool-versions
文件来记录每个 SDK 对应的版本号信息。对于三种作用域,会分别在不同的地方创建.tool-versions
文件,用于记录作用域内所需要的 SDK 版本信息。Global
->$HOME/.version-fox/.tool-versions
Project
->当前项目目录
Session
->$HOME/.version-fox/tmp//.tool-versions
代码如下: