asdf-simple-manual
asdf 是多语言版本管理器:一个工具统一管理 Node.js、Python、Ruby、Java 等几十种运行时的版本,替代 nvm、pyenv、rbenv 各装一套的局面。核心机制是垫片(shim):安装版本时 asdf 在 ~/.asdf/shims/ 下为每个可执行文件生成包装脚本,该目录置于 PATH 最前。执行 node 时先进入垫片,垫片解析出当前应使用的版本,再 exec 真正的可执行文件。
版本声明写在 .tool-versions 文件中:某目录下的 .tool-versions 对该目录及所有子目录生效。进入不同项目目录,同一命令自动切到不同版本。
每种运行时由对应插件负责下载与安装,先装插件再装版本。以下命令基于 0.16+(Go 重写版)。
插件管理
1 | |
安装与卸载版本
1 | |
asdf install(无参数)是新机器初始化的关键:进入项目目录执行一次,声明的所有工具全部装好。
设置版本
1 | |
.tool-versions 每行 工具 版本,可写多个版本构成 fallback 链,支持注释:
1 | |
版本解析优先级:
- 环境变量
ASDF_${TOOL}_VERSION,如ASDF_NODEJS_VERSION=20.18.0,仅当前 shell 生效,覆盖一切文件 - 从当前目录向上查找,最近的
.tool-versions生效($HOME/.tool-versions不过是位于家目录的一份普通文件)
临时用某版本跑一次测试,无需改文件:
1 | |
查询与诊断
1 | |
asdf exec 的价值:cron、CI 等环境的 PATH 顺序不受控,直接 exec 按当前解析规则执行,免去对垫片目录位置的依赖。
垫片维护
asdf 在 install/uninstall 时自动重建垫片。但用运行时自带包管理器(npm install -g、pip install)装入新的全局命令后,垫片不会自动出现,需要手动重建:
1 | |
旧命令迁移(0.15 及以前 -> 0.16+)
0.16 用 Go 完全重写,asdf 从 shell 函数变为独立二进制,一批旧命令被移除:
| 旧命令 | 新写法 |
|---|---|
asdf plugin-add | asdf plugin add(连字符命令全部移除) |
asdf global nodejs 22.14.0 | asdf set -u nodejs 22.14.0 |
asdf local nodejs 22.14.0 | asdf set nodejs 22.14.0 |
asdf shell nodejs 22.14.0 | export ASDF_NODEJS_VERSION=22.14.0 |
asdf update | 移除,用系统包管理器或手动下载二进制 |
asdf shim-versions node | asdf shimversions node |
官方同时移除了 global/local 的说法:asdf 本就没有"全局版本"——家目录的 .tool-versions 随时会被项目目录里更近的文件覆盖,set 的三个落点(当前目录/-u 家目录/-p 父目录)更贴近真实的解析机制。
兼容旧版本文件
插件支持时可读取其他版本管理器的文件(如 .nvmrc、.ruby-version),需在 ~/.asdfrc 中开启:
1 | |
若命令找不到(command not found),按序检查:asdf info 确认 ~/.asdf/shims 是否在 PATH 最前;asdf current 确认版本已安装;仍不行则 asdf reshim。






