放弃 SDKMAN 和 NVM!在 Garuda Linux + Fish 环境下用 mise 统管全栈开发环境

放弃 SDKMAN 和 NVM!在 Garuda Linux + Fish 环境下用 mise 统管全栈开发环境

作为一名长期折腾 Linux 的开发者,给系统配置开发环境简直是家常便饭。最近,我准备在我的主力机上(Garuda Linux,Intel i7-1260P,16GB 内存)重新搭建全栈开发环境。

熟悉 Java 和 Node 生态的朋友,第一反应肯定会去装 SDKMANNVM 。它们确实是老牌神器,但我看着我那花里胡哨且极为顺手的 fish (4.5.0) 终端,突然意识到一个致命问题:这两大老牌工具原生都是用 Bash 编写的,和 Fish 天生八字不合。

如果在 Fish 里强行用它们,往往需要安装各种复杂的兼容层插件(比如 bassnvm.fish),这不仅严重拖慢终端的启动速度,还会时不时遇到环境变量丢失、全局包找不到等玄学 BUG。

今天这篇博客,就来聊聊在 Arch 系 + Fish Shell 的环境下,如何优雅、无痛地管理 Java、Node 甚至全栈的开发环境,以及我最终为何彻底投入了 mise 的怀抱。

🛠️ 为何选择拥抱 mise

mise(前称 rtx)是用 Rust 编写的下一代开发环境管理器。 相比于 SDKMAN 或系统自带的 archlinux-javamise 具备降维打击般的优势:

  1. 天下武功,唯快不破: Rust 编写,脱离了臃肿的 Shell 脚本,终端启动和版本切换的速度堪称瞬发。
  2. 原生支持 Fish: 不需要任何第三方包装器,修改 PATH 环境变量的底层逻辑让它完美兼容所有现代 Shell。
  3. 全能大管家: 它兼容庞大的 asdf 插件生态。JDK、Maven、Gradle、Node、Python、Go......只要你能叫得出名字的语言和工具,它全都能管!

🚀 极简安装与彻底卸载指南

在 Garuda/Arch 下,AUR 提供了极其方便的打包:

Bash

bash 复制代码
# 使用 paru 或 yay 安装
paru -S mise

安装完成后,只需要在 Fish 配置文件中加一行代码,让它接管环境:

Bash

bash 复制代码
# 写入 Fish 配置文件
echo 'mise activate fish | source' >> ~/.config/fish/config.fish

重启终端,准备工作就绪。

(附:强迫症专用的完全卸载指南)

Bash

javascript 复制代码
paru -Rns mise
# 删掉 ~/.config/fish/config.fish 中的初始化代码
# 清理所有环境和缓存(极其重要!)
rm -rf ~/.config/mise ~/.local/share/mise ~/.local/state/mise ~/.cache/mise

💻 核心实战:一站式接管全栈生态

有了 mise,你的系统目录(如 /usr/local/bin)将保持绝对的纯净,所有环境都被干净地隔离在 ~/.local/share/mise 中。

场景一:Java 后端生态(JDK + Maven + Gradle)

以前配 Java 环境,最烦的就是手动写 M2_HOME 或者配置环境变量。现在全免了。

1. 全局环境初始化

Bash

perl 复制代码
# 一键安装最新版 JDK 21,并搭配最新的 Maven 和特定版本的 Gradle
mise use --global java@21 maven@latest gradle@8.5

执行完毕后,直接敲 java -versionmvn -v 就能看到效果,全程无感。

2. 拯救祖传老项目 如果你拉取了一个必须用 Java 8 和老版本 Maven 3.6 的远古项目。只需要进入该项目根目录,执行:

Bash

perl 复制代码
mise use java@8 maven@3.6

这会在当前目录下生成一个 mise.toml 文件。最神奇的地方来了 :以后只要你 cd 进这个目录,JDK 和 Maven 会瞬间自动切换到老版本;一旦离开目录,又会自动恢复成全局的 Java 21。再也不用担心"用错构建工具导致编译失败"了。

场景二:大前端生态(Node + Pnpm / Yarn / Bun)

直接把 NVM 扫进历史垃圾堆,前端环境同样可以一气呵成。

1. 告别全局安装污染 现代前端开发早已不局限于 npm。我们通常会用到 pnpmyarn 甚至 bun。交给 mise 管理,不仅切 Node 版本快,包管理器也能统一管控:

Bash

perl 复制代码
# 安装最新的 Node LTS 版本,并顺手装上主流包管理器
mise use --global node@lts pnpm@latest yarn@latest bun@latest

2. 苛刻的前端老项目 接手了一个必须用 Node 14 才能 npm install 跑起来的 Vue2 老项目?老规矩,进目录:

Bash

perl 复制代码
mise use node@14

当前目录的 Node 和自带的 npm 会立刻回退到 14 版本生态,极度优雅。


💡 进阶杀手锏:全栈项目的目录级环境漫游

如果你开发的是一个全栈项目(比如 Spring Boot 后端 + Vue/React 前端),你可以直接在项目的根目录创建一个终极的 mise.toml

Ini, TOML

ini 复制代码
[tools]
java = "17"
maven = "3.9"
node = "20"
pnpm = "8"

把这个文件提交到 Git 仓库里。以后你的同事拉下代码(甚至如果他们用的是 asdf 时代的 .tool-versions 文件,mise 也能完美兼容读取),只需要敲一行命令,后端到前端的所有指定版本环境就会自动就绪。

其他实用小技巧

  • 查看可用版本: 想查阅远程有哪些 Gradle 版本可以装?用 mise ls-remote gradle
  • 清理磁盘空间: 经常测试各种版本导致硬盘告急?定期执行 mise prune,它会自动帮你删掉那些已经安装但没有任何项目在使用的孤儿版本。

结语

在 Linux 下折腾环境,选择往往比努力更重要。对于 Arch 系 + Fish 这种前卫且追求效率的组合,抛弃历史包袱沉重的 SDKMAN 和 NVM,选择底层逻辑更优秀的 mise,无疑是目前最完美的终极解决方案。

希望这篇记录能帮到同样在配置开发环境的你。你的主力开发环境用的是什么管理工具呢?欢迎在评论区和我交流!

相关推荐
飘尘1 天前
前端转型全栈(Java后端)的快速上手指引
前端·后端·全栈
onething3652 天前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 5 —— SSE 流式输出 + 打字机效果
人工智能·后端·全栈
onething3652 天前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 6 —— 业务完善 + 会话消息预览
人工智能·后端·全栈
东坡白菜3 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
程序员黑豆5 天前
AI全栈开发系列开篇:从Java全栈到AI应用实战
前端·ai编程·全栈
chengliu05086 天前
从前端转型全栈、 Agent 开发
程序员·全栈
智码看视界7 天前
老梁聊全栈系列 JavaScript语言本质:从原型链到异步编程的深度解析
开发语言·javascript·全栈·javascript核心
To_OC7 天前
我一直以为 Ajax 是个黑盒,直到我写了这 50 行代码
前端·后端·全栈
JustHappy12 天前
古法编程秘籍(六):程序到底是怎么跑起来的?从 IO 到中断,一次讲明白
前端·后端·全栈
该用户已不存在12 天前
这9款开发工具夯爆了,用了都说好
后端·程序员·全栈