☰
Windows 下 Node.js 安装与配置完全指南:从版本选择到环境变量排查
2026/10/8 3:01:23 网站建设 项目流程

1. 安装前先想清楚:LTS、版本管理和目录规划

1.1 搞懂 Node.js 版本号:LTS 和 Current 怎么选

很多人上来就去官网点那个最大的绿色按钮,结果装完发现版本号长得不太一样,有的写v20.11.1,有的写v23.4.0,一下就懵了。这里我先用最短的话把版本号这件事说清楚。

Node.js 的版本号遵循 SemVer 规则,格式是主版本.次版本.补丁版本。主版本号变化意味着可能有破坏性 API 调整,次版本号增加代表新增功能,补丁版本则对应 bug 修复和安全更新。官网首页通常展示两个下载入口,一个是LTS(Long Term Support,长期支持版),一个是Current(当前最新版)。

  • LTS 版本:进入长期维护阶段的版本,官方会持续提供安全补丁和稳定性更新,生产环境首选。
  • Current 版本:还在快速迭代中的最新版,可以体验新特性,但 API 可能在下个大版本里发生变化,装在生产环境容易踩雷。

以我个人的看法,除非你是纯粹想尝鲜,否则一律装 LTS。Vite、Webpack、Electron 这类工具链在 LTS 版本上运行得最稳,社区解答也最丰富,遇到问题搜到的资料几乎都基于 LTS。另外特别注意,一些旧项目在升级 Node 大版本后会出现依赖不兼容的问题,尤其是牵扯到node-sass、sharp这类带原生模块的包,后面我会专门讲这个坑。

1.2 要不要装 nvm-windows:多版本管理的真实场景

先说结论:我建议你第一次就用 nvm-windows,而不是直接下载安装包。

很多人觉得"我又不搞多个 Node 版本,装个 nvm 是不是多此一举",这个想法可以理解,但实际工作中你会很快遇到这类场景:

  • 公司老项目用的是 Node 16,你本地装的是 Node 20,跑npm install的时候 node-sass 直接编译失败。
  • 你下载了别人的开源项目,它的package.json里声明了engines字段,要求必须用某个具体 Node 版本。
  • 你想试试新特性,又不想破坏当前稳定的开发环境。

有了 nvm-windows,这些问题就是一条命令的事。它的工作方式和 Linux/macOS 上的 nvm 很相似,维护一个已安装版本列表,通过命令切换当前node命令指向的版本。需要注意,nvm-windows 和类 Unix 上的 nvm不是同一个项目,Windows 用的是 coreybutler 维护的 nvm-windows,去它的 GitHub Releases 页面下载nvm-setup.exe安装即可。

提示:如果你的电脑里已经装了 Node.js,先用控制面板卸载干净再装 nvm-windows。两个东西同时在机器上很容易造成 PATH 指向混乱,你会发现不管执行nvm use 20多少次,node -v显示的始终是旧版本。

1.3 安装目录规划的讲究

接下来是很多人忽视的目录问题。Node.js 的默认安装路径是C:\Program Files\nodejs,这个路径其实有两个隐患:

  1. Program Files 目录带空格。虽然官方安装包能处理这种情况,但某些老旧的构建工具在解析包含空格的路径时确实会出问题。
  2. C 盘空间逐渐被蚕食。npm 全局安装的包默认都在C:\Users\你的用户名\AppData\Roaming\npm和node_modules目录里,日积月累体积不小。

如果你打算用 nvm-windows,路径规划更复杂一些。nvm 建议把 Node 各版本放在它自己的目录下,比如C:\nvm4nodejs,然后通过nvm use动态在C:\Program Files\nodejs创建符号链接。实际上所有版本的 Node 都放在 nvm 的安装目录里,符号链接目录只是暴露当前活跃版本给系统。

如果你不用 nvm-windows,直接用官方安装包,我建议在安装向导里把目录改成D:\nodejs这种不含空格的路径,后续维护干净得多。

2. 一步步把 Node.js 装进 Windows:从下载到安装向导

2.1 下载渠道与版本核实

安装前最后一个准备步骤:下载。官方下载渠道是 nodejs.org,打开之后首页直接展示两个大按钮,左边 LTS,右边 Current,按刚才的结论选 LTS 就行。

国内访问官网有时候很慢,或者下载到一半就断。这种情况可以用 npmmirror.com 的二进制镜像站(原淘宝镜像),地址是https://npmmirror.com/mirrors/node/,里面的目录结构和官网完全一致,下载速度通常快很多。选择版本时有两个细节:

  • 版本目录名:比如v20.11.1/代表完整的 Node 版本。
  • 文件命名规律:Windows 用户下安装包要认准.msi结尾的文件,比如node-v20.11.1-x64.msi。注意区分x64和arm64——现在不少 Surface 和新的轻薄本用的是 ARM 芯片,下载对应的 arm64 版本才能正确运行。

提示:如果你在镜像站看到像v20.11.1/下面还挂着SHASUMS256.txt这样的校验文件,市场上有校验文件列表,难得用上。官网下载反过来经常断流。最近版本的热搜里还出现过 "error installing 24.21.0: node.js v24.21.0 is not yet released or is not available" 这种提示,经验上就是下载的版本号写错,或者镜像站还没同步最新版本,换个时间再下就行。

2.2 安装向导里每个选项背后的含义

双击.msi文件进入安装向导,一路点 Next 的人很多,但有几个选项值得停下来想一想。

第二页的 "Destination Folder"是安装路径。如果前面决定了装到 D 盘,这里就把C:\Program Files\nodejs改成D:\nodejs。这一步还能顺带解决后来"全局模块装到 C 盘"的烦恼,因为 npm 的全局模块默认放在 Node 安装目录的同级 node_modules 里。

第三页 "Custom Setup"里面有几个子选项:

  • Node.js runtime:核心运行时,必须勾选。
  • npm package manager:Node 的包管理器,和 Node 一起发布,建议保留。不装的话后面没法直接npm install。
  • Online documentation shortcuts:桌面和开始菜单的文档快捷方式。对大多数人不重要,去掉也行。
  • Add to PATH:这个必须保留,关键词热门搜索里有一堆 "node 不是内部或外部命令",绝大多数就是因为安装时没勾这个选项,或者手动配置 PATH 时路径写错。

最后一页的 "Install" 按钮。点击后 Windows 可能会弹出 UAC 用户账户控制提示,这是正常的,选"是"即可。安装过程一般一分钟内完成,极少数情况下杀毒软件会拦截,比如某些基于云查杀的引擎会把 npm 全局安装时生成的快捷脚本误判为可疑文件,遇到这种情况暂时放行即可。

2.3 安装完成的第一个确认动作

安装完成后不要急着打开 VS Code 写代码,先在命令行里做三个确认动作。这里有个很关键的经验:安装完 Node.js 之后,之前已经打开的命令行窗口要全部关掉重开。因为环境变量是在安装过程中写入的,已经运行的终端进程读取的还是旧的 PATH 快照。

新开一个 CMD 或 Windows Terminal,依次输入:

node -v npm -v where node
  • node -v会打印当前 Node 版本,看到类似v20.11.1的输出就对了。
  • npm -v打印 npm 版本,目前 LTS Node 20 自带的 npm 是 10.x。
  • where node比较关键,它显示当前node命令指向的可执行文件完整路径。我见过一种诡异情况:明明控制系统里没装 Node,输入node -v有反应,一查where node发现路径在一个莫名其妙的第三方软件目录里。这类问题本质上就是别的软件往 PATH 塞了自己的 Node 运行时,不查根本想不到。

如果你装的是 nvm-windows,情况略有不同。装完后第一步是nvm list available查看可安装的远程版本列表,然后:

nvm install 20.11.1 nvm use 20.11.1

注意nvm install后的版本号不能写错格式,写20是不行,要完整写20.11.1或者用 nvm 支持的模糊匹配写法,否则就会出现前面那个 "not yet released or is not available" 的报错。

3. 装完不等于结束:环境变量、npm 源和第一行命令

3.1 环境变量是怎么自动配的,手动配时要小心什么

官方 MSI 安装包在安装时会自动把 Node.js 的安装目录添加到系统 PATH 环境变量。这就是为什么装完就能直接在任意终端里执行node命令。理解 PATH 的原理很重要,你可以把它想象成一本"快递地址簿":系统执行命令时会在 PATH 记录的每个目录里找有没有这个名字的可执行文件,找到第一个就运行。

如果你遇到"node 不是内部或外部命令"的问题,多半是这三种情况:

  1. 安装时取消了 "Add to PATH" 选项。
  2. PATH 里的路径指向错了。
  3. 系统环境变量和用户环境变量冲突。

手动修复方案:按Win + X打开"系统"→"高级系统设置"→"环境变量",在"系统变量"里找到Path这一项,编辑新增一行指向你的 Node 安装目录,比如D:\nodejs。如果你是 nvm-windows 用户,系统还会在 PATH 里加一个%NVM_HOME%和%NVM_SYMLINK%,这些是 nvm 用来切换版本的关键变量。

提示:改完环境变量后,所有已开的终端窗口都不会自动刷新。要么全部关掉重开,要么在 CMD 里执行refreshenv(需要 Chocolatey 环境)或者干脆重启一次电脑,这是新手最容易困惑的点。

3.2 npm 默认源太慢?换源的完整操作

Node.js 装好以后,接下来要面对的就是 npm 的下载速度问题。npm 默认从https://registry.npmjs.org/拉取包,这个源在国外,国内访问经常慢到让人怀疑人生。换源是国内开发者绕不开的一步。

目前国内用的最广泛的 npm 镜像源是 npmmirror(原淘宝 npm 镜像),地址是https://registry.npmmirror.com。你没看错,现在的地址已经改成.npmmirror.com了,以前那个registry.npm.taobao.org已经是历史产物,很多老教程还在让你用淘宝那个老域名,实际已经不能用了。

查看当前源:

npm config get registry

永久切换源:

npm config set registry https://registry.npmmirror.com

恢复官方源:

npm config set registry https://registry.npmjs.org/

另外提一句,npm 自带的--registry参数可以临时指定源,比如公司内网有私服时:

npm install --registry=https://npm.your-company.com

不修改全局配置,只影响当前命令。

3.3 node -v 有输出但 npm 报错的排查思路

有一种比较隐蔽的问题:node -v正常输出,但npm -v报了一堆错,说什么Cannot find module 'C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js'。

我见过好几个同事遇到过这个问题,根本原因通常是:安装了多个 Node 版本或者残留的旧版 npm 缓存被错误合并。比如之前手动装过某个绿色版 Node,后来改成 MSI 安装,旧文件没清干净,两边文件混在一起,npm 找不到配套的npm-cli.js。

处理办法是把 Node 彻底卸载重装。具体步骤:

  1. 控制面板卸载 Node.js。
  2. 删除残留目录C:\Program Files\nodejs。
  3. 删除用户目录下的.npm缓存目录里的 node_modules 相关文件,路径通常是C:\Users\用户名\AppData\Roaming\npm和C:\Users\用户名\AppData\Local\npm-cache。
  4. 重新安装。

这套清理流程对 nvm-windows 用户同样适用,因为符号链接切换版本时,如果目标目录里混入了旧文件,也会出现类似问题。

4. Windows 专属坑合集:这里都是我曾经被绊住的地方

4.1 管理员权限与"仅此用户"的问题

Windows 上安装 Node.js 有个隐藏权限问题。我装软件的时候习惯右键"以管理员身份运行"安装包,这个习惯本身没问题,但它会带来一个副作用:如果安装时勾选了"Install for all users"选项,Node 的安装目录和全局 npm 前缀会写入系统级环境变量;如果没勾选这个选项,可能只写入当前用户的环境变量。

更诡异的是,有时候你发现命令行里输入npm install -g装全局包,报错EPERM或者EACCES,这通常是因为 npm 全局目录没有写权限。Windows 上比较粗暴的解决办法是管理员身份的终端里运行一次:

npm cache clean --force

然后重试安装命令。但这不是治本的方法,正确的做法是把 npm 的全局路径配置到你有写权限的目录:

npm config set prefix "D:\nodejs\npm-global"

设置完之后,npm install -g安装的包会进入D:\nodejs\npm-global里的 node_modules,同时命令脚本会生成在同目录下,需要把D:\nodejs\npm-global也加到 PATH 里,才能直接在终端运行全局命令。这么做的好处是以后用npm install -g vite装出来的vite命令不会因为权限问题无法调用。

4.2 PowerShell 执行策略拦截脚本

这是一个特别小众但特别折磨人的坑。

你按照教程在 PowerShell 里运行npx create-react-app my-app,结果抛出:

无法加载文件 ....ps1,因为在此系统上禁止运行脚本。

问题根源是 Windows PowerShell 默认的执行策略是Restricted,禁止任何.ps1脚本运行。而 npm 的npx在执行时为了跨平台兼容会调用 shell 脚本(Windows 上就是.ps1或.cmd)。

解决办法是在有管理员权限的 PowerShell 里执行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

RemoteSigned策略表示:本地创建的脚本可以运行,从网上下载的脚本需要经过数字签名验证才能运行。这是兼顾安全与便利的默认平衡点。

注意:如果你在"Windows PowerShell ISE"或者"命令提示符"里执行npx就不太会遇到这个问题,因为 CMD 执行的是.cmd版本脚本。很多教程没提这茬,导致全程用 PowerShell 的同学在npx那一步卡死。

4.3 路径、中文和杀毒软件

Node.js 项目里路径含中文或空格的问题,属于"平时没事、出问题一头雾水"的类型。

比如你把项目放在D:\工作\个人项目\第一个项目下面,然后npm install偶尔会报一些奇怪的错,尤其是安装原生模块时,编译器找不到路径里的某个文件。npm 内部对路径的处理有问题不代表所有包都有问题,但确实有一部分 C++ 原生模块的构建脚本对非 ASCII 路径支持不佳。

我给你的建议是:项目工程目录用纯英文且不含空格。个人项目也养成都放在D:\projects\my-app这种目录下的习惯。开发和运维领域这种"玄学"问题,绝大多数和路径编码有关。

杀毒软件的问题也值得单独提出来。Windows Defender 在默认配置下一般不会捣乱,但有些第三方安全软件会实时扫描磁盘上的每个可执行文件,在npm install大量生成文件时造成性能骤降,个别激进的安全策略甚至会直接把node.exe加入隔离名单。遇到安装依赖极其缓慢或者间歇性报错时,可以暂时退出杀毒软件试试。装完之后再恢复防护。

4.4 老项目 node-sass 编译失败的连锁反应

这是我在实际工作中见到最普遍也最难解决的坑。

很多稍微老一点的前端项目(三五年历史)直接或间接依赖node-sass,而这个包的核心原理是:安装时从 GitHub 下载对应 Node 版本预编译的 libsass 二进制,下载不到就在本地用 node-gyp 现场编译。Windows 上本地编译需要 Python 和 Visual Studio Build Tools,缺一不可,少了任何一个都会报各种看不懂的编译错误。

最经典的报错是:

gyp ERR! stack Error: Could not find any Visual Studio installation

解决办法通常是手动安装 Windows Build Tools,在管理员终端里跑:

npm install --global windows-build-tools

但这条路现在也不是很顺了,因为项目维护状态变化。说实话,如果项目还在用 node-sass,我建议你优先考虑换用sass(dart-sass 实现),通常只是改一下包名和导入方式的事。实在改不了,再考虑装 Python 3.x + VS Build Tools 的组合。

还有一个先决条件要确认:node-sass 必须和当前 Node 主版本匹配,比如 node-sass 4.14 只支持 Node 14,放到 Node 20 上百分之百编译失败。这时候你想用 Node 14 来跑项目,一个 nvm-windows 就派上大用场了,一条命令切换:

nvm install 14.21.3 nvm use 14.21.3

Windows 上多版本管理的重要性,在这种时候体现得淋漓尽致。

5. 跑通第一个 Node.js 项目:从 http 服务到日常脚本

5.1 5分钟启动一个本地 Web 服务

装好环境之后,拿一个最简单的 HTTP 服务练手是理解 Node.js 运行机制的最好方式。新建一个server.js文件,写入以下代码:

const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end('Hello, Node.js on Windows!'); }); server.listen(3000, () => { console.log('Server running at http://localhost:3000'); });

在项目目录下执行:

node server.js

打开浏览器访问http://localhost:3000,看到输出就说明 Node.js 已经能正常工作了。如果访问后一直转圈不见响应,优先排查 Windows 防火墙是否拦截了 node.exe 的入站请求,首次运行时会弹出网络访问许可,在没有管理员权限的情况下有可能被自动拦截。

这个例子里有个细节值得初学者体会:Node.js 的 HTTP 模块创建服务时不需要额外安装任何依赖,说明 Node 本身自带的模块体系已经覆盖了基础的网络编程能力。你更常用的express、koa这些框架,本质上是基于这些底层模块封装出来的工具集。

5.2 用 Node.js 写个批量处理脚本的基本套路

安装完环境后很多人不知道"使用 Node.js"到底能用在哪。除了跑 Web 服务,前端构建脚本、文件批量处理、爬虫抓取,这些都是 Node.js 的常规应用场景。

给你看一个实际例子:写一个脚本批量重命名当前目录下所有.jpg图片,把文件名里的空格替换成下划线。

const fs = require('fs'); const path = require('path'); const currentDir = process.cwd(); const files = fs.readdirSync(currentDir); files.forEach((file) => { if (path.extname(file) === '.jpg' && file.includes(' ')) { const newName = file.replace(/ /g, '_'); fs.renameSync(path.join(currentDir, file), path.join(currentDir, newName)); console.log(`renamed: ${file} -> ${newName}`); } });

执行方式依然简单:

node rename.js

这个脚本用到的fs和path模块都是 Node.js 内置的,核心思路是读目录、遍历文件、改文件名。把 Node.js 当作脚本语言用,Windows 上要比写 PowerShell 脚本更顺手,因为 Node.js 的语法对前端开发者几乎没有学习成本,而且fs模块处理编码、递归目录这种操作远比批处理命令直观。

5.3 前端开发者常用的 Node.js 全家桶认知

最后聊一下前端开发者的熟悉场景。现在的前端工具链本质上都跑在 Node.js 上:

  • Vite / Webpack:打包工具,负责把 Vue、React 源码编译成浏览器能跑的静态文件。
  • npm / yarn / pnpm:包管理器,负责安装项目依赖、管理版本。
  • npx:临时执行 npm 包的命令,比如npx create-vite直接生成项目模板。

这些工具在 Windows 上安装后,都会在 PATH 里注册一个和包名同名的命令脚本(.cmd、.ps1、.bash分别对应不同 shell)。这也是为什么npm install -g之后新开一个终端才能识别新命令——PATH 只在终端启动时读取一次。

如果你发现自己全局装了个包,但输入命令提示"不是内部或外部命令",先检查全局安装目录是否在 PATH 里。用npm prefix -g查看当前全局前缀,然后按之前小节的方法调整 PATH 即可。

6. 后续维护:版本升级、多版本切换与彻底卸载

6.1 用 nvm-windows 换版本的实际操作

如果你装了 nvm-windows,平时换版本都是这么几步:

nvm list # 查看本机已安装版本 nvm list available # 查看远程可安装版本 nvm install 22.2.0 # 安装新版本 nvm use 22.2.0 # 切换当前使用版本

nvm use切换的原理有意思:它会把当前激活的 Node 版本通过符号链接挂到C:\Program Files\nodejs目录下。这个过程需要管理员权限,所以如果你的终端不是管理员模式,nvm use会自动弹 UAC 确认,这正常。

我在实际使用中注意到一个问题:如果你用nvm装了多个版本,每个版本的全局 npm 包是互相隔离的。在 Node 20 下装的全局工具,切到 Node 22 之后就"消失"了。这其实是 nvm 的设计如此,避免不同版本间全局模块冲突。你在踩坑时会发现这个设计是优点而不是缺点。

6.2 手动升级与卸载清理的正确姿势

没用 nvm-windows 的同志,升级 Node 只有一条路:去官网下载新版安装包,直接覆盖安装。MSI 安装器会保留原有 npm 全局包,但存在一种概率出现兼容性问题,最典型的表现是之前全局装的某个包依赖旧版 Node 的某些 C++ 内部 API,新版 Node 不兼容就报错。

这时候就需要彻底重装。卸载之后手动清理这几个位置的残留文件:

路径说明
C:\Program Files\nodejs安装主目录,卸载后通常残留
C:\Users\用户名\AppData\Roaming\npm全局 npm 脚本和模块
C:\Users\用户名\AppData\Local\npm-cachenpm 下载缓存
C:\Users\用户名\AppData\Roaming\npm-cache某些旧版 npm 缓存位置
HKCU\Software\nodejs和HKLM\Software\nodejs注册表残留项

清理完再装新版,就能避开大部分莫名其妙的兼容坑。

关于 nvm-windows 的卸载也要多说一句:直接卸载前最好先nvm use切换到某个版本,再在控制面板里卸载。不然符号链接失效后,PATH 里残留的C:\Program Files\nodejs指向一个不存在的目标,虽然不太影响其他命令,但每次node都会报错,烦人。

6.3 一个小技巧:npm 的依赖重装与缓存问题排查

最后补充一个日常使用频率很高的排查思路。Windows 上npm install经常出现"装到一半报错"的情况,很多和网络不稳或缓存损坏有关。简单粗暴的方法:

  1. 删除node_modules目录。
  2. 删除package-lock.json文件。
  3. 执行npm cache clean --force清理缓存。
  4. 重新npm install。

如果项目很大,node_modules删起来很慢,可以借用系统命令加速:

rd /s /q node_modules

这是 Windows 上删除目录最快的方式,没有之一。

装了 node 之后,也许你还会遇到node 命令突然反应很慢的情况。排查思路是先定位node的可执行文件路径,确认系统中没有别的软件覆盖。之前的热搜里有 "codex windows设置未完成" 这类开发者工具问题,其实很多都是环境变量没配对。核心排查思路是一致的:先where node,再看 PATH 顺序,最后检查用户变量和系统变量是否冲突。

这套安装与排查的流程我前前后后执行过不下几十次,从 Windows 7 一路用到现在 Windows 11,凡是照着上面思路走的,基本二十分钟内都能把环境跑通。真正在一线踩坑之后你会明白,Node.js 本身安装并不难,难点都在 Windows 的权限体系和历史残留上。既然选择了 Windows 作为开发环境,花点时间了解 PATH 的工作原理、PowerShell 的执行策略和卸载清理的细节,后续所有的烦恼都会少一大半。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询