前言
在工作与学习的过程中需要安装不同版本的 node,来回安装很不方便,就有了切换NodeJs版本的需求,因此从网上借鉴安装多个NodeJs 的方法,有感而发,设计了一个改良的方案。
涉及操作:
- 系统环境变量
- cmd 命令
- .npmrc 配置文件
- 文件结构编排
步骤
.1 系统环境变量
主要涉及这三处,Path变量 有则改,没有则新增 (NODE_HOME、NODE_HOME_GLOBAL 是自定义的,可以自己重命名)
变量 | 描述 |
---|---|
NODE_HOME | NodeJs安装路径(C盘) |
NODE_HOME_GLOBAL | 全局可读写路径(非C盘,C盘读写需要权限,所以结构一样,只有盘符不一样) |
Path | 可执行文件路径集(暴露可执行命令) |
在 Path变量内注册的路径下的可执行命令都可在 cmd 窗口内执行
新增以下两个值
变量 + 路径 | 效果 |
---|---|
%NODE_HOME% | 用于能够执行 node、npm 命令,该目录内存在 node、npm 的可执行文件 |
%NODE_HOME_GLOBAL%\node_global | 用于能够执行 cnpm、pnpm 命令,该目录内存在 cnpm、pnpm 的可执行文件(前置条件是已安装cnpm,pnpm) |
.2 修改.npmrc
.npmrc 文件内是可以引用系统环境变量的, 格式 ${value},这块是动态切换的核心之一。
# 测试: npm i express -g
# ${} 获取的是系统环境变量
# 全局路径
prefix=${NODE_HOME_GLOBAL}\node_global
# 缓存路径
cache=${NODE_HOME_GLOBAL}\node_cache
# npm 仓库地址
home=https://registry.npmmirror.com
# cnpm 仓库地址: 淘宝镜像; 全局安装命令: npm install -g cnpm --registry=https://registry.npmmirror.com
registry=https://registry.npmmirror.com/
disturl=https://registry.npmmirror.com/dist
# pnpm 配置; 全局安装命令: npm i pnpm -g
# pnpm全局bin路径
global-bin-dir=${NODE_HOME_GLOBAL}\node_global
# pnpm全局安装路径
global-dir=${NODE_HOME_GLOBAL}\node_global\node_modules\pnpm\pnpm-global
# # pnpm全局仓库路径(类似 .git 仓库)
store-dir=${NODE_HOME_GLOBAL}\node_global\node_modules\pnpm\pnpm-store
# pnpm创建pnpm-state.json文件的目录
state-dir=${NODE_HOME_GLOBAL}\node_global\node_modules\pnpm\pnpm-state
# pnpm全局缓存路径
cache-dir=${NODE_HOME_GLOBAL}\node_global\node_modules\pnpm\pnpm-cache
3.文件夹结构
以下两个文件夹是需要自己创建的
- D:\Program Files\NodeJs\V14.20.0\node_global
- D:\Program Files\NodeJs\V14.20.0\node_cache
// 安装路径
C
- Program Files
- NodeJs
// 14版本 NodeJs 安装路径
// 对应系统环境变量 %NODE_HOME%, 变量Path内注册 %NODE_HOME%,
// 暴漏该路径下 node.exe, npm.cmd 等可执行命令(比如 node -v, npm -v 等命令).
- V14.20.0
// 里面除了安装该版本 NodeJs 时自带的 npm 包等外,不会再写入文件
- node_modules
- node.exe
- npm.cmd
// 16版本 NodeJs 安装路径
- V16.18.0
- ...... 省略,同上结构
// 截止到 node_global、node_cache 这两个节点,都是自己创建的,
// 这两个节点内部的文件是自生成的
D
- Program Files
- NodeJs
- V14.20.0
// 全局安装路径, 对应系统环境变量 %NODE_HOME_GLOBAL%,
// 变量Path内注册 %NODE_HOME_GLOBAL%, 暴漏该路径下 cnpm.cmd,
// pnpm.cmd 等可执行命令 (比如 cnpm -v, pnpm -v 等命令).
- node-global
// 该目录保存所有通过 -g 参数安装的依赖包
- node_modules
// 执行 npm install -g cnpm 生成该文件夹
- cnpm
// 执行 npm install -g pnpm 生成该文件夹
- pnpm
// 以下4个文件夹是在 .npmrc 内配置指定的(可以不创建,需要时自动创建)
- pnpm-cache
- pnpm-global
- pnpm-state
- pnpm-store
- cnpm.cmd
- pnpm.cmd
- pnpx.cmd
- node_cache
- V16.18.0
- ...... 结构同上,省略
.4 cmd 脚本
// 该命令用于更新系统环境变量,KEY 是变量名,VALUE是变量值
call setx /m KEY "VALUE"
对应 NodeJs 版本改成自己的
脚本:NODE_V14.20.0.cmd
@echo off
echo Running ......
call setx /m NODE_HOME "C:\Program Files\NodeJs\V14.20.0"
echo NODE_HOME_VERSION: ======= V14.20.0 =======
echo Running ......
call setx /m NODE_HOME_GLOBAL "D:\Program Files\NodeJs\V14.20.0"
echo NODE_HOME_GLOBAL_VERSION: ======= V14.20.0 =======
pause
exit
脚本:NODE_V16.18.0.cmd
@echo off
echo Running ......
call setx /m NODE_HOME "C:\Program Files\NodeJs\V16.18.0"
echo NODE_HOME_VERSION: ======= V16.18.0 =======
echo Running ......
call setx /m NODE_HOME_GLOBAL "D:\Program Files\NodeJs\V16.18.0"
echo NODE_HOME_GLOBAL_VERSION: ======= V16.18.0 =======
pause
exit
想用哪个版本就运行哪个,需要以管理员身份运行。
效果
步骤
1,执行脚本
2,新开窗口查询信息
执行完脚本后重开一个cmd窗口去查询,不然不准确。