fnm
fnm
配置#
Windows#
缓存补全脚本#
fnm completions 生成的脚本约 42 KB,每次启动重新生成要 30 ms。它只随 fnm 二进制变化,
缓存起来即可:
fnm env 不能这样处理 —— 它必须每次执行,为当前会话创建 multishell 目录。
multishell 目录会一直堆积#
每开一个 shell,fnm 都会在 %LOCALAPPDATA%\fnm_multishells 下建一个目录,
Windows 上退出时不清理,会一直累积。
它们是 junction,本身几乎不占空间,但目录数多了会拖慢遍历。清理陈旧的:
删 junction 不会动到目标 —— %APPDATA%\fnm\node-versions 下的 node 安装是安全的。
统计这个目录的体积时要注意:Get-ChildItem -Recurse 会穿透 junction,
把同一份 node 重复计上千遍,看起来像几个 GB,实际并没有。
macOS 同样会堆积,位置是 ~/.local/state/fnm_multishells。那边是符号链接,
du -sh 显示 0B,所以不占空间,但条目数会无限增长。
按 PID 清理比按时间准#
目录名的格式是 <PID>_<时间戳>,所以可以直接判断创建它的 shell 还在不在,
这样不会误删今天开着的会话:
PID 可能被复用,最坏情况只是漏删一个,不会误删活着的。
但这个判据有个盲区:祖先已退出、后代还在跑。 子进程会继承父进程的 PATH,
所以一个「创建者已死」的目录,可能仍被某个长期运行的进程(编辑器的集成终端、
agent 的会话、tmux/herdr 里的 pane)引用着。删掉之后那些进程里 node 会直接消失:
稳妥做法是两个条件都满足才删 —— 进程已退出,且创建时间超过一天:
真误删了也不严重:新开的 shell 会重新生成,受影响的进程重启一下即可。