问题场景
- 刚安装完fnm,配置文件尚未完全配置
- 运行了fnm current ,fnm use 版本号等命令
- 使用普通权限下的cmd出现error: We can't find the necessary environment variables to replace the Node versiYou should setup your shell profile to evaluate 'fnm env'
- powershell和管理员的cmd没有问题(powershell也有一段命令,需要单独为其设置)
解决方案(3种)
本质上都是运行官方文档的一段代码
@echo off
:: for /F will launch a new instance of cmd so we create a guard to prevent an infnite loop
if not defined FNM_AUTORUN_GUARD (
set "FNM_AUTORUN_GUARD=AutorunGuard"
FOR /f "tokens=*" %%z IN ('fnm env --use-on-cd') DO CALL %%z
)
猜测原理为:fnm use 版本号 命令需要在上下文中获取版本号信息,执行这段代码会手动把信息放入到cmd的上下文中
因此,各种方式都是运行该段代码(之后这段代码会放在start.cmd文件里)。
第一种:手动运行CMD文件
使用 win + r 命令输入 cmd,默认地址是在 %USERPROFILE% 路径下,可以把start.cmd文件放在这里,每次打开cmd窗口手动输入 start.cmd 运行
没有优点
第二种:通过快捷方式运行CMD文件
对cmd.exe程序新建一个快捷方式,然后在cmd的快捷方式上右键==》属性==》在目标里加上
/k %USERPROFILE%\start.cmd ==》点击“确定”
(/k
参数告诉命令提示符窗口在运行完批处理文件后保持打开状态)
优点:侵入少 缺点:每次需要打开这个快捷方式才可以访问
第三种:通过注册表设置
注意!在操作注册表前请先进行备份!
打开注册表,进入到 "HKEY_CURRENT_USER\Software\Microsoft\Command Processor" 路径下
如果没有对应文件夹,需要手动进行创建
在 Command Processor 文件夹上右键 ==》新建==》字符串值 数值名称为 AutoRun ,数值数据为
start.cmd文件的地址,保存注册表之后重启电脑即能自由访问。
优点:每个cmd都能使用 缺点:侵入多
(该方法来自于通义千问和互联网)
总结
总体来说,推荐第三种方式,一劳永逸,也更适合前端在各个地方打开cmd,之后有问题也会以第三种方式补充到这篇文档上
题外话:在下载完node之后, %USERPROFILE%文件夹下还有一个 .npmrc的文件 这个文件是npm的配置文件,保存着node的两个关键的文件夹,如果把node的下载位置设置到其他盘的话,这个文件里面的默认下载地址可以改为 default/... 这样实现一个配置文件管理多个node中的npm的默认下载地址(default是快捷方式,作者通过这种文件链接的方式实现fnm的切换) 这个都是推测,可以尝试一下