Vue.js 入门第一关就卡在"配置环境"上的朋友,我见过太多了。很多人把视频教程反复看,以为装个软件就能开写,结果第一步就遇到报错,满屏的红色提示连每句话在说什么都看不懂。这篇文章就是把这些年我遇到的环境配置问题、新手问得最多的问题,一次性梳理清楚:从需要装什么、为什么需要、装的时候注意什么,到第一个项目顺利启动,按真实操作顺序走一遍,目标只有一个——让你稀里糊涂的配置过程,变得每一步都有数。
1. 环境配置之前:先弄清 Vue 到底需要哪几件套
1.1 Vue 不是"装一个软件",而是一套依赖链
很多初学者会拿着"Vue 环境配置"去搜索,然后看别人教程里又装 Node.js 又装 npm、还要敲一堆命令,一脸懵:Vue 不就是个前端框架吗,写在 HTML 里不就能用了吗?
这个直觉没有错。用<script>标签直接引入 vue.js 文件,确实能写最基础的 Vue 应用。但你想走的是"现代化前端开发"这条路:按需引入组件、模块化组织代码、热更新、打包部署、工程化开发,这些能力全都建立在一套工具链之上。这套工具链的第一环,就是 Node.js。
那 Vue 本身是个运行在浏览器里的框架,为什么需要 Node.js 这种后端运行时?这可能是新手最容易困惑的概念。原因很简单:你在开发阶段用的那些工具——脚手架、依赖管理、开发服务器、代码编译、打包——它们都是跑在 Node.js 平台上的软件。你可以这样理解:Vue 是"汽车",Node.js 是"制造汽车和维修汽车的车间设备"。你开车(在浏览器里跑 Vue)不需要车间,但你要造车(开发、调试、构建 Vue 项目),车间设备一样都不能少。
1.2 版本选型:Node 版本和 Vue 版本要对得上
按照官方文档的说法,开发 Vue 3 项目需要 Node.js 16.0 及以上版本,但实际落地的时候我不太建议选"最新大版本",更建议选维护最稳定的 LTS(Long Term Support)版本,也就是带"LTS"标识的偶数版本。比如现在常见的 Node 18、20、22 这几个大版本,都是 LTS 版本,选它们就是了。
为什么不能直接装最新版?我遇到过不止一次:新手装了 Node 23 或者更激进的版本,跑npm install的时候,有些依赖还没跟上,报错报得莫名其妙,查了半天发现是版本兼容性问题,换回 LTS 版本立就好了。在入门阶段,求稳比求新重要得多,这是第一条经验。
Vue 这边也一样。Vue 2 已经在 2023 年底停止维护了,现在直接从 Vue 3 入门才是正确选择。不需要纠结"我是不是该先学 Vue 2 再去学 Vue 3",直接上 Vue 3 就是主流路线。
2. 从零安装 Node.js 和 npm:Windows 与 Mac 双版本实操
2.1 Windows 安装:记住这三个关键动作
Windows 的安装是最省事的,但要注意几个小操作,否则后面容易踩坑。
第一,去 Node.js 官方网站下载安装包,认准 .msi 格式的安装文件,位置在官网首页就能看到。一个是 LTS 版本,一个是 Current 版本,直接下载 LTS。
第二,安装过程中一路 Next,但是要注意:到了 "Select Components" 那一屏,保持所有默认勾选不动。这里默认会把 Node.js runtime、npm 包管理器、以及"添加到 PATH"这几项全部勾上。我见过有人觉得 Python 不需要、Corepack 不需要,随手把勾去掉,装完发现npm命令找不到,把自己坑惨了。默认全选就是对的。
第三,安装完成后,不要立刻去装别的东西。先打开一个全新的终端窗口(Windows 的 CMD 或 PowerShell 都可以),输入下面两条命令验证:
node -v npm -v如果分别打印出版本号,说明安装成功。注意:如果你安装前就开着终端,装完之后一定要重新打开一个新终端,否则命令会提示"不是内部或外部命令",因为 PATH 环境变量在旧终端里还没刷新。这个细节每年能坑掉大量新手。
2.2 Mac 安装:nvm 才是真正的省心路径
Mac 用户有两种主流做法:直接下载官方 .pkg 安装包,或者用 nvm(Node Version Manager)管理版本。我强烈推荐第二种方式,理由很实际:你以后可能会同时维护多个项目,不同项目对 Node 版本要求不一样。用 nvm,你可以随时切换 Node 版本,不需要重新卸载安装。
这里有个基础概念要先讲清楚:nvm 是一个管理 Node 版本的工具,它本身也是命令行工具。在 macOS 上用 Homebrew 安装 nvm 是最常见的路径:
brew install nvm装完之后需要手动把以下内容加到你的 shell 配置里,一般是~/.zshrc(苹果电脑默认是 zsh):
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"这一步为什么是必须的?因为 nvm 的安装脚本不会自动写 shell 配置,你不手动加这些行,新终端里执行nvm就会提示"command not found"。这是 Mac 用户安装 nvm 最容易卡住的地方,我帮忙排查过很多次,十次里有九次是这个原因:配置没写上,或者写完没重启终端。
配置完成后,执行source ~/.zshrc让配置立即生效,然后安装并切换到你想要的 Node 版本:
nvm install 20 nvm use 20这里有个区别要提醒:安装 Node.js 后你就有 npm 了,但是 nvm 和 npm 是两个东西。nvm 管 Node 版本,npm 管 JavaScript 依赖包,别混了。
2.3 装完必做的三项环境验证
安装不是"装完"就完事,而是"验证完"才算装好。我建议新手做完下面三个验证:
node -v:能看到版本号,说明 Node 运行时可用npm -v:能看到版本号,说明 npm 可用- 切换到一个非系统目录(比如
cd ~或cd Desktop),再执行上面两条命令。这一步是确认 PATH 配置没问题。如果只在特定目录下才生效,说明 PATH 配置可能有阶段性问题
另外一个很多教程不提的操作:把 npm 的全局包存放路径修改到自定义目录。Windows 系统默认会装到C:\Program Files\nodejs之类的地方,可能导致某些命令需要管理员权限才能执行;而且全局包装在系统盘,日积月累会占不少空间。建议在命令行里执行:
npm config set prefix "D:\npm-global" npm config set cache "D:\npm-cache"Mac/Linux 上同理,可以把路径改到用户目录下。
改完之后注意:新的全局包路径要加到 PATH 环境变量中,否则后面你全局安装某个工具,执行命令时会提示找不到。Windows 用户在系统环境变量的 Path 里新增D:\npm-global即可;Mac/Linux 用户在 shell 配置里加export PATH="$PATH:$HOME/npm-global/bin"也没问题。不常遇到,但一旦遇到就非常困惑,建议提前处理。
3. npm 镜像配置与依赖安装的那些坑
3.1 为什么你的 npm install 慢成蜗牛
运行过npm install的人应该都有体会:一个刚创建的项目,依赖不算多,硬生生等了五分钟十分钟,进度条走得比蜗牛还慢。这不是你网速不行,而是 npm 默认注册表服务器(registry)在国外,国内访问延迟很高。
你可以看一下当前的 registry 配置:
npm config get registry默认输出一般是https://registry.npmjs.org/。这个地址没问题,官方服务器,就是物理距离太远,下载依赖包的速度让人着急。这本身不涉及什么复杂原理,就是网络传输的基本逻辑:服务器离你越远,链路越长,延迟越大。
3.2 镜像源配置和常见失败处理
解决办法是配置 npm 镜像源。这里的"镜像"不要和任何奇怪的东西联系到一起,它就是一个概念:官方 registry 的一个同步副本,部署在国内,你从副本上下载依赖包,速度会快很多。
用一行命令把 registry 切换到国内镜像地址:
npm config set registry https://registry.npmmirror.com设置完可以执行npm config get registry确认已经切换。然后再去装依赖,速度的体感提升几乎是"质的飞跃"——原来要等几分钟的,现在十几秒到几十秒就能跑完。
实际使用中,依赖安装还会碰到一些更"刁钻"的问题。比如npm install中途报错,常见的几种情况是:
- 网络中断/超时:提示
ETIMEDOUT、ENETUNREACH、ECONNRESET。处理方式是切换镜像源、检查网络稳定性,或者给 npm 配置更宽松的超时时间:npm config set fetch-timeout 600000 - 依赖包版本冲突:某些依赖的版本要求互相矛盾。这种情况先把看不懂的报错复制到搜索引擎里,看报错关键词,不要盲目删文件
- 缓存数据损坏:执行
npm cache clean --force清掉缓存,然后重新安装
这里有一个相当重要的经验:新手遇到 npm 安装失败,第一反应不应该是删除 node_modules 文件夹,因为删除后要重新下载全部依赖,还是可能失败,又浪费一次时间。建议按顺序排查:先看报错关键词,去搜索有没有相同问题;然后考虑镜像源是否配置成功;然后是网络问题;最后才考虑清缓存、删依赖。
3.3 node_modules 出问题的标准修复姿势
如果你的项目依赖确实乱到无法解决,标准修复姿势是这样一套命令,按顺序执行:
# 清理目录 rm -rf node_modules # 清理 npm 缓存 npm cache clean --force # 删除锁文件(不删除可能残留不一致的依赖记录) rm -rf package-lock.json # 重新安装 npm install注意:在 Windows 上rm -rf命令在 CMD 里不生效,要用 PowerShell 的Remove-Item -Recurse -Force node_modules,或者直接右键文件夹删除,效果一样。另外,删除 package-lock.json 要谨慎——如果项目是团队协作的,这个锁文件能确保大家依赖版本完全一致,删掉重装可能带来版本漂移。但如果你这个项目完全自己在弄,依赖又乱得离谱,删掉重新生成就是标准做法。
4. 选对脚手架:create-vue 还是 create-vite
4.1 2018 年的 vue-cli 和现在的新工具
打开搜索引擎搜"vue 脚手架",你会看到两种主流方案,特别容易把新手整懵:一个是vue-cli(通过npm install -g @vue/cli安装),一个是create-vue(通过npm create vue@latest调用)。很多网上教程还在用vue-cli,但官方现在的推荐早就不一样了。
为什么会有这个变化?简单说,vue-cli 是基于 Webpack 的构建工具链,Webpack 处理大型项目时冷启动和热更新都比较慢;后来社区里出了 Vite,主打"开发服务器秒启动、基于浏览器原生 ES 模块加载",体验上完全是代差级别的提升。Vue 官方也顺势拥抱了 Vite,直接推出了 create-vue 这套新方案。现在的官方文档里,新建 Vue 3 项目的推荐命令就是下面这条:
npm create vue@latest这不是让你去 npm 全局装东西。它的逻辑是:npm 会自动拉取 create-vue 这个工具的最新版本,然后当场执行——效果等同于下载并运行一个脚手架程序。整个过程不需要你手动全局安装任何包,这一点和 vue-cli 的方案体验差别挺大。
4.2 交互式创建项目的每步含义
执行npm create vue@latest之后,它不会立刻生成项目,而是进入一个交互式问答界面,一句话概括:每个问题都问你要不要开启某个功能。
比如它会问你项目叫什么名字、是否使用 TypeScript、是否启用 Vue Router、是否引入 Pinia、是否需要单元测试、是否需要端到端测试、是否需要 ESLint、是否需要 Prettier 等。
新手最安全的策略是什么都先说不(No),先把最纯粹的 Vue 项目跑起来。不要一上来就选 TypeScript、路由、状态管理一堆东西。原因很简单:这些功能选项是要写进项目结构里的,功能越多,项目越复杂,一旦启动报错你要排查的东西就越多。先把基础项目跑通,之后再返回头、按需求逐步启用这些功能,会轻松很多。
追问一下:这个交互式界面本身也值得讲清楚。它内部用到一个叫 prompts 的交互式命令行工具,你看到的是选项是/否的简单选择。所以完全不用慌,就算选错了,也可以删掉目录重新创建,整个过程很快。
创建完成之后,进入项目目录:
cd your-project-name然后安装依赖:
npm install这时你会看到项目里出现一个node_modules文件夹,里面是所有第三方依赖的实际文件,少说也有几百兆。注意:这个文件夹不需要提交到 Git 仓库里,后面部署一个排除它的.gitignore就够了(脚手架一般会替你生成)。所谓"依赖管理"本质上就是在这个文件清单(package.json)和实际文件(node_modules)之间建立对应关系。
5. 启动第一个项目:从 npm run dev 到页面 HMR
5.1 dev 服务器到底做了什么
依赖安装完成,接下来的高光时刻就是启动项目。在项目目录下执行:
npm run dev这个命令的背后是package.json里的 scripts 配置,脚手架的默认配置大概是这样的:
{ "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview" } }npm run dev做的事情简单理解就是三步:把本地开发服务器跑起来,监听文件变化,提供热更新(HMR)。在 Vite 的加持下,这个启动过程会非常快——基本一两秒内就能看到终端输出本地访问地址。
一个非常大的优势是:传统 Webpack 项目的冷启动需要打包整个项目,几百个模块一个个处理,耗时经常按十几秒甚至分钟算;Vite 的思路是启动时根本不做全量打包,而是利用现代浏览器原生的 ES Module 能力,浏览器请求哪个模块,Vite 才实时给你编译哪个模块。这也是为什么 Vue 3 + Vite 组合在开发体验上完胜老方案的原因。
5.2 第一次打开页面看什么
终端会显示类似这样的输出:
VITE v5.x.x ready in 315 ms ➜ Local: http://localhost:5173/ ➜ Network: http://192.168.x.x:5173/这一段信息怎么读?
Local: http://localhost:5173/是给你自己用的浏览器访问地址Network: http://192.168.x.x:5173/是给局域网内的其他设备访问的,比如你的手机、另一台电脑,前提是它们在同一局域网下
在浏览器打开http://localhost:5173/,你会看到一个默认欢迎页面,上面有 Vue 的 logo 和一堆文档链接。到这里,你的 Vue 环境配置就算彻底跑通了,第一个项目已经启动了。
可能有人会问:"我按照步骤装好了,也启动了,但为什么网页上什么都没有?" 这种情况往往出在端口被占用或者浏览器缓存上。端口问题我们在下一节会详细讲;浏览器缓存的话,按住 Ctrl+Shift+R 强制刷新一下基本就能解决。
5.3 动手改代码,验证热更新
为了确认整个开发链路真的畅通,我建议你顺手做一个最小改动测试:打开项目里的src/App.vue文件,找到模板部分的文字标题,把它改成你自己的内容,保存。
你会发现浏览器页面不需要刷新就直接更新了。这就是热更新(HMR,Hot Module Replacement)的效果:开发服务器监听到文件变化,只替换修改的那个模块,而不是刷新整个页面。这个体验对开发效率的影响有多大?你多写几天组件就知道了。
另外建议看一眼这些初始文件的职责,这对后面的学习非常重要:
src/App.vue:根组件,项目的主入口组件src/main.js:应用入口文件,负责创建 Vue 应用实例并挂载到 HTML 页面上src/components/:存放组件文件index.html:整个项目的壳页面,Vue 应用会挂载到它里面的<div id="app">上
这里要特别提醒一件事:Vue 的源码是写在.vue单文件组件里的,它混合了 HTML 模板、JavaScript 逻辑、CSS 样式,浏览器本身不认识这种文件格式。之所以能在浏览器里正常运行,靠的正是开发服务器在中间做的实时编译转换。这也是为什么你必须通过npm run dev来跑项目,而不是直接双击打开某个 .vue 文件。
6. 新手的三个经典报错,和对症下药
6.1 端口占用:EADDRINUSE
好不容易配置完环境,启动项目时终端突然报一个:
Error: listen EADDRINUSE: address already in use :::5173这个报错的意思很直白:5173 端口已经被另一个程序占用了。最常见的两种原因:你之前启动过项目没关掉(比如终端关闭了但进程还活着,Windows 断电强杀进程后更容易残留);或者有其他应用正好用了这个端口。
解决办法有两条路。
第一条路是关掉占用进程。Windows 上可以先找出占用进程的 PID:
netstat -ano | findstr :5173输出结果的最后一列就是 PID(进程号),然后可以找到并结束它:
taskkill /PID 你的PID /FMac 上可以用lsof -i :5173查看端口占用,用kill -9 PID结束进程。
第二条路是让 Vite 换个端口,不用去碰进程。在项目根目录手动创建vite.config.js,写入一个端口配置:
import { defineConfig } from 'vite' export default defineConfig({ server: { port: 5174 } })如果 5174 也被占了,Vite 会继续往后找可用端口,基本不用你操心。
6.2 PowerShell 执行策略卡住 vue.ps1
Windows 用户可能会遇到一个很诡异的报错,提示无法加载某个 .ps1 脚本,因为在此系统上禁止运行脚本。这个问题的根源不是 Vue,而是 PowerShell 默认的执行策略(Execution Policy)限制,禁止执行未经签名的本地脚本。
解决办法有两个。
临时方案:在 PowerShell 命令前加前缀,绕过当前会话的限制:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass然后在同一个窗口里执行你的命令。这个设置只对当前窗口生效,关掉终端就没了,不影响系统安全性。
一劳永逸的方案:以管理员身份打开 PowerShell,执行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSignedRemoteSigned 表示本地创建或从网络上传输下来的脚本,如果是数字签名的或者已信任的都可以运行。这是比较常见的开发机设置,对日常开发影响很小。不过要强调一点:如果你不清楚这个设置在团队/公司电脑上会不会违反安全策略,建议先咨询管理员,用临时方案就够了。
6.3 依赖缺胳膊少腿:Cannot find module
还有一种情况特别容易让新手破防:项目明明配置好了,也没报端口问题,启动时却弹出一堆Cannot find module 'xxx'。这种报错的直接原因就是 node_modules 里的某个依赖包缺失或不完整。典型场景:
- 代码里 import 了某个依赖,但 package.json 里没有写,或者没有安装过
- 某个依赖在安装过程中中断,node_modules 里的包不完整
- 切换分支/拉取别人代码后,新依赖没有安装
排查思路很简单:先确认报错的那个模块是否在你的 package.json 依赖列表里。如果确实缺,直接:
npm install 模块名如果是项目整体依赖环境乱了,走上一节讲的标准化修复流程:先清 node_modules、清缓存、删锁文件,重新安装,多数情况都能解决。
6.4 顺带说一句 devtools 打不开
热搜词里有一个现象很有意思:vue.js devtools (v5) 插件如果打不开了,好多人以为是配置问题。其实 DevTools 插件打不开,十有八九是这三个原因:浏览器内核版本和插件版本不匹配、插件没正确启用开发者模式、或者当前页面不是 Vue 开发环境页面。如果你打开的是别人线上的 Vue 网站,我自己测试下来的经验是:生产包默认会把 DevTools 的钩子关闭,你自然看不到调试面板。用自己启动的npm run dev项目调试,一般都能正常唤起。
另外也提一下:新版 Vue DevTools 不再强制依赖 Vue.js devtools 插件那个老版本,直接按扩展商店里的 Chrome 官方 Vue.js devtools 安装,然后刷新页面即可。
我个人的体会是,环境配置这件事,大部分痛苦都来自"不知道自己在做什么"。当你明白了 Node.js 是跑开发工具的运行平台、npm 是依赖管理工具、Vite 是开发服务器和打包器、.vue文件需要实时编译,那两个小时的折腾就会变成顺理成章的事。这篇内容顺着完整走一遍,其实也就十分钟左右的事,但能让你少搜几个小时的报错。如果启动过程中遇到这里没写到的坑,先看报错关键词,再顺藤摸瓜去搜,十有八九答案都在往前的某一次报错链路里。