如果你经常在不同项目之间切换(例如一个项目要 Node 18,另一个要 Node 22;或同一台 Mac 需要同时维护 Python 3.10/3.12),asdf 的价值在于:用一套命令与一个配置文件,统一管理多语言运行时版本,并且可以做到“项目级锁定”。
它本质上是一个版本管理框架,通过插件扩展支持不同语言/工具链。官方站点:https://asdf-vm.com/
推荐用 Homebrew 安装(更好升级与卸载)。
brew install asdf
安装后需要把 asdf 的初始化脚本加入你的 shell 配置(zsh 常见)。如果你使用 zsh,可以先确认 Homebrew 安装路径,然后把 asdf.sh 引入到 ~/.zshrc。
echo " . $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.zshrc
最后让配置生效:
source ~/.zshrc
asdf 通过插件支持不同语言。先查看可用插件列表:
asdf plugin list all
添加 Node.js 与 Python 插件:
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin add python https://github.com/danhper/asdf-python.git
说明:这些都是公开插件仓库,后续升级/排错时也方便直接查 README 与 issue。
先列出可安装版本(示例以 Node.js):
asdf list all nodejs
安装一个版本:
asdf install nodejs 22.11.0
设置全局默认版本:
asdf global nodejs 22.11.0
也可以对当前目录(项目)设置版本:
asdf local nodejs 18.20.4
验证当前生效版本:
node -v
当你执行 asdf local 时,asdf 会在项目根目录写入 .tool-versions。这个文件建议提交到仓库(类似于“运行时版本说明书”),团队成员拉代码后执行一次安装即可对齐环境。
示例(内容长这样):
nodejs 18.20.4 python 3.12.2
当进入项目目录时,asdf 会自动选择对应版本。如果你已经安装过版本但仍然未生效,可以执行一次重建 shim:
asdf reshim
1)命令找不到 asdf:通常是 shell 初始化没生效,检查 ~/.zshrc 是否正确引入 asdf.sh,并重新打开终端。
2)安装 Python 失败:多半是系统依赖缺失(openssl、readline 等)或 macOS SDK 相关问题。建议先阅读插件文档中对依赖的说明,再按提示补齐。
3)版本切换后仍然是旧版本:先确认当前目录是否存在 .tool-versions(项目版本优先级更高),再执行 asdf current 查看生效值,必要时 asdf reshim。
- asdf 官方文档:https://asdf-vm.com/
- asdf GitHub:https://github.com/asdf-vm/asdf
- asdf-nodejs 插件:https://github.com/asdf-vm/asdf-nodejs
- asdf-python 插件:https://github.com/danhper/asdf-python