【折磨自己】记fnm版本管理工具的使用

是的,诚如标题所言,我重装系统折磨自己了,在进行到安装node时我脑子一抽放弃了nvm这才有了今晚的惨案

介绍一下

什么是fnm?
诺,自己看!GitHub - Schniz/fnm: 🚀 Fast and simple Node.js version manager, built in Rust

:rocket: Fast and simple Node.js version manager, built in Rust

node安装

在node官方的下载页提供了各种package-manager的下载node的方式,fnm赫然在其中
跟着官方的教程走着先吧

# installs fnm (Fast Node Manager)
winget install Schniz.fnm

# download and install Node.js
fnm use --install-if-missing 20

# verifies the right Node.js version is in the environment
node -v # should print `v20.13.1`

# verifies the right NPM version is in the environment
npm -v # should print `10.5.2`

执行到第二步我就犯了难,我的Windows Terminal提示我这个fnm命令不存在,我以为只是刚安装软件所以原本开的窗口没识别环境变量(配jdk等也一样),但是在读过fnm的官方文档后我发现事情没有那么简单。

PowerShell

官方文档中就是简单的

Add the following to the end of your profile file:
fnm env --use-on-cd | Out-String | Invoke-Expression

  • On Windows to edit your profile you can run this in a PowerShell
    notepad $profile

可是坑爹的Win11自带的Windows Notepad只是轻飘飘来了一句,位置不存在。
好嘛,能不能学学人vim 不存在你就给我建一个啊!!!
我只能在Windows Terminal中输入

$profile

然后按照界面返回的

C:\Users\UserName\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

去自己建立文件并且把官方文档中的

fnm env --use-on-cd | Out-String | Invoke-Expression
添加到新建的文件中

Windows Command Prompt aka Batch aka WinCMD

官方文档看到这里,发现CMD也要单独配置,那就照着一起做吧,不过这里让我有了不好的预感

fnm is also supported but is not entirely covered. You can set up a startup script and append the following line:

FOR /f "tokens=*" %i IN ('fnm env --use-on-cd') DO CALL %i

:warning: If you get the error i was unexpected at this time, please make a .cmd file as suggested by the first step in the Usage with Cmder secton add it’s path to the >AutoRun registry key.

是的,按照文档中给出的链接的介绍

Make a file in C:\bashrc.cmd or wherever you want your “rc” file to reside.

@echo off
set TEST_VAR=something

Run regedit by searching for it or running it in cmd.

In the folders on the left navigate to:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor

Right click on the Command Processor folder and click New -> String Value. Enter the key AutoRun. Double click on AutoRun and enter the bashrc location C:\bashrc.cmd.

我又是建文件又是加注册表的(下次重装估计就忘光光),愉快的打开了CMD,结果果然弹出了错误

:warning: If you get the error i was unexpected at this time,

好嘛,官方预判了,麻溜的把文件中的
FOR /f "tokens=*" %i IN ('fnm env --use-on-cd') DO CALL %i
换成官方文档 Usage with Cmder章节中的

@echo off
FOR /f "tokens=*" %%z IN ('fnm env --use-on-cd') DO CALL %%z

再次打开CMD的我傻了,完全不动了,不是我不动了,是CMD他不动啊
经过一番百度后,我找到了这个

因为本论坛禁止使用AIGC的文字内容,原理分析请各位佬友自行移步

按照帖子中的代码,这一关就算过去了

@echo off
fnm env --use-on-cd > temp.txt
for /f "tokens=*" %%z in (temp.txt) do (
 %%z
)
del temp.txt

Git Bash

既然弄都弄了,就把终端一起解决了把,结果傻眼了,官方文档这也没有啊
最相近的只有Bash

Add the following to your .bashrc profile:

eval "$(fnm env --use-on-cd)"

在个人文件夹建了.bashrc文件后,我忐忑的打开了Git Bash here
界面弹出来的话让我十分高兴

WARNING: Found ~/.bashrc but no ~/.bash_profile, ~/.bash_login or ~/.profile.

This looks like an incorrect setup.
A ~/.bash_profile that loads ~/.bashrc will be created for you.

Git Bash自动的帮我创建了~/.bash_profile文件并且帮我链接到了.bashrc文件
实际上有经验的佬友知道Git Bash配置文件路径并且直接创建~/.bash_profile文件填入fnm所需的环境变量初始化也是可以的

WebStorm

上面几个我常用的命令行能踩坑我算都踩了,那就打开WebStorm来愉快的加班吧
Webstorm却提示"can not find Node / NPM interpreter."
欸!你小子又不在官方文档里,也是个java的主,为啥不能用终端的环境变量呢?
再三确认各种终端已经有环境变量可以取到node了,我愤愤不平的打开命令行直接运行Webstorm想看看报错信息,这回却没有提示找不到node了
????????????
好家伙,搁着玩我呢,打开设置界面后,我看到webstorm自动填入了~\AppDatal\Local\fnm_multishells\25488_1716057262434\node.exe
看着中间的数字字符串我突然意识到确实应该是有个地址能取到fnm默认的node版本。
经过一通搜索,我找到了藏在issue中的解决办法
~\AppDatal\Roaming\fnm\aliases\default\node.exe
把这个地址给了Webstorm后成功消除了提示

后记

心累(真的!熬夜了心脏现在有点疼,我先去睡了),没啥别的想说的,点个赞再走把

4 Likes

不是,现在心脏顶着慌,还有点想吐,希望能睡个好觉看到明天今天的太阳

2 Likes

醒了,还活着

好想用ai抓取一下坑爹点。

我用fnm的时候,发现安装后总提示什么glibc报错。查了一下是centos7已经停止lts了,最新版的node lts 也不支持了。