在使用 nvm 对 nodejs 进行版本管理的时候常常会碰到全局变量切换不了等状况,我们来分析一下为什么和如何解决。
不适用 nvm 使用 nodejs 的时候通常我们会设置两个目录
npm config set prefix "node_global"
npm config set cache "node_cache"
用来设置 npm 全局安装的包和缓称文件地址,同时还会设置一个系统变量 NODE_PATH, 值为
node_globals 目录地址。
nvm 装 nodejs
nvm 安装完成后会在系统变量建立两个变量 NVM_HOME 和 NVM_SYMLINK。
当我们安装一个版本的 nodejs 并使用 nvm use 该版本的时候,会到 nvm 底下通过 setting.txt 下的 path 改变 node 的安装位置。
root: D:\nvm
path: D:\node12.0.0.js
arch: 64
proxy: none
node_mirror: http://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
由于 nvm 并不能帮我们切换环境变量,我们将 NVM_HOME 变量指向 nvm 安装目录,如("D:\nvm"),
然后设置 NVM_SYMLINK 为 nvm 安装的 node 根目录,如:"D:/nvm/v14.0.0"。最后再添加一个 NODE_GLOBAL 全局变量,添加到 PATH 里 NVM_SYMLINK 之前。该值为npm全局安装包的位置:"D:/nvm/v14.0.0/node_global"。
nvm 安装完 node 之后会同时在 nvm 安装目录下生成 temp 目录,里面是对于该 node 版本的 npm 包管理工具,安装完 npm 后会消失。如果网络出现问题或安装中断,这时需要手动将该包解压并重命名为 npm 后放到 node 版本下的 node_modules 目录下,如果没有该 npm 包,该版本的 node 无法使用 npm 命令,另外在该 node 版本的目录下(如:D:/nvm/v14.0.0) 还需要 npm, npm.bat, npx 这三个文件,可以手动从其他 node 版本目录下拷贝进来。再次测试应该就可以。
我们写一个 bat 文件来自动执行环境变量和 nvm 命令,注意需要将用户变量和系统变量都更改,因为 vscode 里使用的是用户变量。
nvm.bat:
cmd /c "setx /m NODE_GLOBAL D:/nvm/v14.0.0/node_global & setx NODE_GLOBAL D:/nvm/v14.0.0/node_global & setx /m NVM_SYMLINK D:/nvm/v14.0.0 & setx NVM_SYMLINK D:/nvm/v14.0.0 & nvm use 14.0.0 & npm config set prefix D:/nvm/v14.0.0/node_global & npm config set cache D:/nvm/v14.0.0/node_cache"
其他版本的可以再依照上面再写一份,注意执行的时候使用管理员权限执行。