执行Gatsby项目开发命令时Node版本检测异常问题求助
问题描述
我最近碰到个闹心的问题:当我执行npm run develop(手滑写成rpm run develop了,抱歉)启动Gatsby项目的开发服务时,直接弹出错误:
Error: Gatsby requires Node.js 18.0.0 or higher (your version is v16.20.1).
但我单独在终端跑node -v,显示的明明是v18.19.0啊!后来我用nvm ls查了下已安装的Node版本,输出如下:
v14.21.3 v16.20.1 v18.17.0 v18.19.0 -> v20.5.0 system default -> 20.5.0 (-> v20.5.0) iojs -> N/A (default) unstable -> N/A (default) node -> stable (-> v20.5.0) (default) stable -> 20.5 (-> v20.5.0) (default) lts/* -> lts/iron (-> N/A) lts/argon -> v4.9.1 (-> N/A) lts/boron -> v6.17.1 (-> N/A) lts/carbon -> v8.17.0 (-> N/A) lts/dubnium -> v10.24.1 (-> N/A) lts/erbium -> v12.22.12 (-> N/A) lts/fermium -> v14.21.3 lts/gallium -> v16.20.2 (-> N/A) lts/hydrogen -> v18.19.0 lts/iron -> v20.10.0 (-> N/A)
看得出来系统默认已经是v20.5.0了,我甚至把v16.20.1都卸载了,但还是跳这个错误。之前跟着Copilot的建议试了一堆方法:删npm包重装、设置默认NPM版本、加.nvm文件、改package.json的engines字段,全没用。有没有大佬能帮我捋捋这到底哪出问题了?
我的排查建议(踩过类似坑的过来人)
先重启终端试试!
有时候nvm的版本切换不会立刻同步到所有终端会话,尤其是你改了nvm设置后,旧终端还停留在原来的环境里。把所有终端窗口都关了,重新开一个,先跑node -v确认是v20.5.0,再进项目目录执行开发命令,说不定就好了。检查项目里的.nvmrc文件
如果你的项目根目录有个.nvmrc文件,那nvm会自动切换到文件里指定的Node版本,哪怕你全局默认是v20。你可以用cat .nvmrc看看里面写的啥,如果是v16相关的,改成v20.5.0或者lts/hydrogen(对应v18.19.0),然后跑nvm use切换版本再试试。确认npm和当前Node版本绑定正确
有时候npm可能和旧版本的Node绑定在一起了,你可以跑npm config get prefix看看npm的路径,然后去这个路径下查Node版本:$prefix/bin/node -v(把$prefix换成刚才查到的路径)。如果显示的是旧版本,那先跑nvm use 20.5.0,然后重新装一遍最新的npm:npm install -g npm@latest。IDE内置终端的锅?
如果你是在VS Code这类IDE的内置终端跑命令,IDE可能没加载nvm的配置,导致用了旧版本。试试重启IDE,或者在内置终端里手动跑nvm use 20.5.0再执行开发命令。清缓存重装依赖
依赖缓存里的旧信息也可能搞事情,试试这套操作:# 清npm缓存 npm cache clean --force # 删除node_modules和锁文件 rm -rf node_modules package-lock.json # 重新装依赖 npm install检查系统级Node有没有干扰
虽然你用nvm管理Node,但系统可能还装了全局的Node版本。跑which node看看当前Node的路径,如果不是nvm目录下的(比如~/.nvm/versions/node/v20.5.0/bin/node),那就是系统级Node在捣乱,要么卸载它,要么把nvm的路径放到系统PATH的最前面。
备注:内容来源于stack exchange,提问作者MAZ

