1. 先搞清楚这两个工具各自管什么:Node.js 与 HBuilderX 的分工边界
新同事入职第一天,人事把一台全新笔记本扔过来,我在旁边看他折腾:HBuilderX 装好了,项目克隆下来,点运行,控制台立刻刷出十几行红字——"npm 不是内部或外部命令"、"找不到 node"。他以为是自己 HBuilderX 装错了,卸了装、装了卸,折腾了两个小时。问题根本不在 HBuilderX,而是他压根没装 Node.js。这类"Node.js 安装以及 HBuilderX 配置"的活儿看着简单,但它踩坑的概率,远比装个 VS Code 高得多,因为它涉及两个独立软件之间的路径对接、版本对齐和端口协商。
1.1 Node.js 在前端链路里到底承担哪些活
很多人对 Node.js 的理解停留在"跑后端服务的",其实在前端日常里它更多是作为工具链的宿主环境存在的。Node.js 本质上是把 Chrome 的 V8 引擎抽出来,加上一套文件、网络、进程操作的底层库(libuv),让 JavaScript 能脱离浏览器在操作系统上直接跑。你敲的每一条npm install、每次vite build、每个vue-cli脚手架命令,背后都是 Node 进程在执行。
具体到日常场景,Node.js 至少要干这几件事:第一,作为包管理器 npm 的运行环境,从远端仓库把依赖拉下来解压进node_modules;第二,作为构建工具的宿主,webpack、vite、rollup、esbuild 全部是 Node 包,没有 Node 它们连启动都启动不了;第三,作为本地开发服务器,热更新、代理转发、mock 接口都跑在 Node 里;第四,作为脚本自动化引擎,比如批量压缩图片、把一堆散图用 pdfkit 合并成 PDF、自动生成雪碧图、扫描代码里的中文文案导出成表格,这些都是 Node 最擅长的小活儿。
对于做 uni-app 或者微信小程序的人来说,第四点尤其重要。HBuilderX 内置编译器能处理大部分语法转换,但只要你用了npm生态里的第三方库,或者需要用 CLI 方式创建项目、跑自动化打包,Node 就是绕不过去的必经之路。
1.2 HBuilderX 是什么,它和 VS Code 那套的区别在哪
HBuilderX 是 DCloud 出的一套轻量级 IDE,它的定位和 VS Code 完全不同。VS Code 是"编辑器 + 插件生态",编译、运行、调试全靠你装的一堆扩展;HBuilderX 是"编辑器 + 内置编译器 + 一体化的运行/打包链路",开箱就能跑 uni-app、uni-app x、5+ App、微信小程序项目,很多场景下连node_modules都不需要。
这个差别带来一个很有意思的现象:HBuilderX 里创建的原生项目(也就是在 IDE 里右键新建的 uni-app 项目),默认是没有package.json和node_modules的,它的编译走的是内置的编译器。而用 CLI 方式(npx degit dcloudio/uni-preset-vue#vite my-project)创建的项目,本质就是一个标准的 Node 项目,必须npm install才能跑。
所以 HBuilderX 和 Node 的关系是:HBuilderX 负责写代码、编译、打包、连真机、连小程序开发者工具;Node 负责提供依赖仓库和脚本执行能力。两者通过"node 可执行文件路径"和"npm 可执行文件路径"这两个接口连接起来,路径对不上,HBuilderX 就抓瞎。
1.3 两套东西为什么必须"对上号"
最容易被忽略的是版本对齐。HBuilderX 的内置终端调用的是系统PATH环境变量里的 node,如果你系统里装的是 Node 22,而项目依赖里锁着node-sass、canvas、sharp这类带原生编译产物的包,安装阶段就会直接失败——因为它们的预编译二进制文件是按特定 Node ABI 版本发布的,版本错一位就用不了。
还有一种更隐蔽的情况:你机器上装了两个 Node,一个是官网安装包装在C:\Program Files\nodejs,另一个是 nvm 管理的放在用户目录下。where node(macOS/Linux 是which -a node)能查出好几个路径,但 HBuilderX 只会认第一个。结果就是你在终端里node -v显示 18,HBuilderX 里跑出来的却是 22,报错信息都对不上号。
我把这一层关系整理成一张表,方便你判断问题出在哪:
| 现象 | 大概率原因 | 排查入口 |
|---|---|---|
| HBuilderX 终端里 node 报错 | 系统 PATH 没有 Node 或路径未生效 | 重开终端、检查环境变量 |
| 命令行能跑,HBuilderX 里跑不了 | 图形界面启动时 PATH 与 shell 不一致 | 检查 nvm 默认版本、软链 |
| npm install 报原生模块编译失败 | Node 版本与依赖 ABI 不匹配 | 用 nvm 切到项目指定版本 |
| 端口报占用 | 内置浏览器端口与本地服务撞车 | HBuilderX 运行配置里改端口 |
2. Node.js 该装哪个版本:LTS、Current 与多版本共存的取舍
我在群里最常被问的就是"Node.js 装哪个版本"。这个问题如果没有上下文,答案就是废话;但只要你说清楚项目类型,答案就非常具体。所以先别急着下安装包,花五分钟把版本策略想明白,能省掉后面两小时的排查。
2.1 版本号背后的含义:偶数版本才是长期饭票
Node.js 的版本节奏是固定的:每年 4 月、10 月各发一个大版本。大版本号是偶数(16、18、20、22、24)的,会被选为LTS(Long Term Support),享受约 30 个月的支持周期,其中前 12 个月是 Active LTS,之后进入 Maintenance 阶段;奇数版本(17、19、21、23)是过渡版本,生命周期只有半年左右,纯粹给尝鲜和测试用的。
对绝大多数人来说,永远选最新的 Active LTS。写这篇文章的时候,Node 18 已经进入维护期,20 和 22 是主流选择。如果你在做新项目,直接上 22 就行;如果是接手老项目,一定先做两件事:打开package.json看engines字段有没有写版本要求;再看根目录有没有.nvmrc文件,里面通常会写死一个版本号。
提示:
engines字段写的版本约束只是个"建议值",npm 默认不会强制拦截,除非你开启了engine-strict。但.nvmrc是团队约定,看到就照着切。
我个人的判断标准是这样的:
| 项目类型 | 推荐版本 | 原因 |
|---|---|---|
| 全新 uni-app / Vue3 项目 | 最新 Active LTS(如 22.x) | vite 6 及以上要求 Node 18+,新版本兼容性最好 |
| 维护中的 Vue2 老项目 | 18.x 或项目 .nvmrc 指定版本 | 老依赖里的原生模块可能没跟上新 ABI |
| 依赖 node-sass 的项目 | 按 node-sass 版本表对照 | node-sass 停止维护,版本对应关系很死 |
| 需要跑多个不同类型项目 | 用 nvm 装 2-3 个版本随时切 | 一机多版本是常态,不是洁癖 |
2.2 直接装安装包,还是上 nvm 管理
官网下载.msi(Windows)或.pkg(macOS)双击安装,是最省事的路子,装完 Node 和 npm 一起就位,环境变量自动配好。它的问题在于不可退版:想换回 18 就得先卸载再装一遍。
如果你同时维护两个以上项目,我强烈建议用版本管理器。macOS/Linux 上是nvm,Windows 上是nvm-windows,两个东西名字一样但完全是两个项目,命令也有差别。macOS 上的 nvm 本质是一段 shell 脚本,安装完之后需要在~/.zshrc或~/.bashrc里加载,否则新开终端找不到命令。
# macOS / Linux 安装 nvm 后的典型操作 nvm install 22 # 安装 Node 22 最新版 nvm install 18.20.4 # 安装指定小版本 nvm alias default 22 # 设置默认版本,新终端自动使用 nvm use 18.20.4 # 当前会话切换到 18 nvm ls # 列出已安装版本Windows 上则是另一套:
nvm install 22.14.0 nvm use 22.14.0 nvm list # 查看已安装版本 nvm root # 查看 nvm 安装目录2.3 Windows 上 nvm-windows 的几个必知坑
nvm-windows 有几个和其他平台不一样的行为,不知道的话很容易怀疑人生。
第一个坑:安装 nvm-windows 之前必须先卸载已有的 Node.js。如果C:\Program Files\nodejs已经存在,nvm-windows 安装时会提示目录非空,即使强行装完,nvm use也会因为软链接目标被占用而失败。正确顺序是:控制面板卸载 Node → 删除残留目录 → 装 nvm-windows → 用 nvm 装 Node。
第二个坑:全局包不跨版本共享。macOS 上的 nvm 有个--reinstall-packages-from参数可以迁移全局包,nvm-windows 没有。所以你在 Node 22 下npm i -g pnpm,切到 Node 18 后pnpm就消失了,得重装一遍。这也是我建议全局命令尽量少装、优先用npx的原因。
第三个坑:中文路径和空格。nvm 的安装根目录(nvm root)不要放在带中文或空格的路径下,否则创建软链接时可能失败。同理,settings.txt里的root和path两项都要指向纯英文路径。
第四个坑:切换后必须重开终端。nvm use修改的是符号链接,已经打开的终端窗口里PATH是快照,不会实时刷新。切完版本立刻node -v,很可能还是旧的——这不是没生效,是终端需要重开。
3. 安装完别急着写代码:npm 源、缓存目录、全局路径的收尾配置
很多人装完 Node 直接npm install,然后对着进度条发呆十分钟,最后超时失败。安装成功不等于配置完成,下面这三项收尾工作,做完之后你的日常开发体验会有质的区别。
3.1 换源:这一步能省掉九成的安装超时
npm 默认从官方源拉包,国内直连的体验很不稳定,大包经常卡在reify阶段然后报超时。换成国内镜像源是最直接的办法,目前主流选择是 npmmirror(原来的淘宝源,域名已经从registry.npm.taobao.org迁移到registry.npmmirror.com,老域名已经停止服务,别再用了)。
npm config set registry https://registry.npmmirror.com npm config get registry # 验证是否生效 npm config list # 查看全部配置如果你只在某几个项目上需要换源,可以在项目根目录建一个.npmrc文件,写入registry=https://registry.npmmirror.com。项目级配置的优先级高于全局配置,这样切项目的时候互不干扰。
除了 registry,还有两个配置值得一起改:disturl和electron_mirror。前者影响原生模块的预编译二进制下载,后者影响 Electron 相关依赖。只要项目里出现node-gyp相关的编译日志,说明正在从disturl拉东西,配一下能少等很久。
注意:公司内网开发环境通常有自己的私有源(Nexus、Verdaccio 等),换源之前先问一下团队,别自作主张把源指到公网,构建机上下不到包会很难看。
3.2 Windows 全局目录与权限的老问题
Windows 上 npm 默认把全局包装到%APPDATA%\npm,npm i -g时通常不需要管理员权限,这块还好。但缓存目录%LocalAppData%\npm-cache有可能被系统清理工具扫掉,导致某些包反复重下。
真正会出问题的是把 Node 装在C:\Program Files下的情况。这个目录受 UAC 保护,某些包的 postinstall 脚本想写文件就会被拒绝,报EPERM或EACCES。解决办法是显式把全局 prefix 和 cache 指到用户目录:
npm config set prefix "D:\dev\node-global" npm config set cache "D:\dev\node-cache"改完之后要把D:\dev\node-global加进系统PATH,否则全局命令找不到。macOS 上如果遇到EACCES,最正确的做法不是sudo npm i -g(那会把 root 权限混进node_modules,后患无穷),而是用 nvm 装 Node,nvm 的目录天然在用户空间,永远不需要 sudo。
3.3 装完之后必须跑一遍的验证清单
环境配完,别急着开项目,先跑下面这组命令,任何一项不对都当场解决,比在项目里报错再回头查要高效得多。
node -v # 打印版本号 npm -v # 打印 npm 版本 where node # Windows:确认路径唯一性 which -a node # macOS/Linux:列出全部 node npm config get registry # 确认源已切换 npm doctor # 一键体检,检查权限/缓存/网络npm doctor这个命令知道的人不多,但它非常实用。它会依次检查 npm 版本、Node 版本、registry 可达性、缓存目录权限、Git 可用性等项目,输出里带ok、not ok、warn三种标记,能一次性把大部分配置问题暴露出来。
最后别忘了corepack。Node 16.9 之后内置了 corepack,它能在项目里自动启用packageManager字段锁定的包管理器版本,避免"你本地是 pnpm 8、CI 上跑的是 pnpm 9"导致的锁文件冲突。启用方式就一行:
corepack enable4. HBuilderX 下载、安装与首次启动必改的默认项
Node 的活儿干完了,接下来是 HBuilderX。这里我要先纠正一个常见误解:HBuilderX 不需要"安装",它的官方分发形式是压缩包,解压即用。这一点对新手很不友好,因为大家习惯了双击 exe 一路下一步。
4.1 标准版和 App 开发版,到底该下哪个
HBuilderX 官网提供两个包:标准版和App 开发版。两者功能完全一致,区别只是预装插件数量。App 开发版大约 300MB 上下,预装了真机运行、App 打包、uni-app x 等一大批插件;标准版只有几十 MB,插件按需下载。
我的建议是:如果你确定要做 App 真机调试或者云打包,直接下 App 开发版,省得第一次连手机时等插件下载。如果只是写 Web 和微信小程序,标准版足够,后续需要什么插件再装,下载体验反而更清爽。
解压路径有三个硬性要求:不要放在系统盘(C 盘)、不要带中文、不要带空格。我见过好几次真机运行莫名其妙失败,最后发现是D:\我的项目\HBuilderX 4.0\这种路径惹的祸——拼接出来的命令行参数被空格截断了。老老实实放D:\dev\HBuilderX这种路径,能少掉一半玄学问题。
4.2 插件安装与编辑器基础设置
首次启动后,第一件事是登录账号(右上角头像)。云打包、uni-app 插件市场下载模板、部分远程协作功能都需要登录态,提前登好省事。
第二件事是装插件。打开工具 → 插件安装,按需勾选。我通常会装这几类:内置浏览器(用于 H5 预览)、Git 插件(版本控制面板)、npm 支持、微信小程序支持、uni-app 编译器、ESLint(如果项目开了代码规范)。插件安装是异步的,装的时候注意右下角的进度条,没装完就点运行容易报莫名其妙的错。
第三件事是改编辑器设置。工具 → 设置里能改快捷键方案(有 VS Code 方案可选,从 VS Code 转过来的人一定先改这个)、字体字号、缩进(推荐 2 空格)、行尾符(Windows 上统一成 LF,能避免跨平台协作时的整文件 diff)。
这里有个细节值得提醒:新版 HBuilderX 的设置界面是图形界面和settings.json双份的。图形界面改完会写进 json,但 json 里手写的字段如果图形界面不认识,它可能被覆盖掉。所以我习惯插件配置、快捷键这类复杂配置直接在 json 里写,图形界面只用来改主题、字体这类简单项。另外 HBuilderX 还支持导入 VS Code 的配色主题和部分配置,迁移成本比想象中低。
4.3 端口相关的设置,第一次就要改掉
HBuilderX 内置了一个 Web 服务器,用于 H5 项目预览,默认端口是8080。问题是 8080 这个端口太抢手了:Tomcat、Jenkins、各种本地后端服务、甚至某些路由器管理页都用它。端口冲突的表现是点击"运行到浏览器"后浏览器打开空白页,或者控制台报"端口被占用"。
处理方式是在工具 → 设置 → 运行配置里改内置浏览器端口,改成 8081、8090 之类不常用的值。同时运行 → 运行到浏览器 → 配置 Web 服务器里也能配,两处设置互相影响,改完最好重启一下 IDE。
除了内置服务器端口,还有一个容易混淆的是uni-app 项目自己的 dev server 端口。CLI 创建的 Vue3 + vite 项目,dev server 默认是 5173;HBuilderX 内置编译的 Vue2 项目走 webpack,默认还是 8080 系。这两个端口是两回事,前者要在vite.config.js里改,后者要在 HBuilderX 设置里改。
| 配置位置 | 影响范围 | 默认值 | 修改方式 |
|---|---|---|---|
| HBuilderX 运行配置 | 内置 Web 服务器 | 8080 | 工具 → 设置 → 运行配置 |
| vite.config.js | CLI 项目 dev server | 5173 | server.port字段 |
| manifest.json | H5 平台 devServer | 与内置一致 | 源码视图手动加 |
| 微信开发者工具 | 小程序调试端口 | 自动分配 | 开发者工具安全设置 |
5. 让 HBuilderX 用上你自己的 Node 和 npm
前面所有工作做完,HBuilderX 还是有可能"看不见"你的 Node。原因在于它查找可执行文件的方式,和你在终端里敲命令的方式并不完全一样。
5.1 HBuilderX 的 Node 探测逻辑
HBuilderX 启动时,会从当前进程继承的环境变量里去找node和npm。这里的"当前进程"很关键——如果你是从终端用命令行启动 HBuilderX(open -a HBuilderX或直接跑可执行文件),它继承的是终端的完整环境,nvm 配的路径都在;如果你是从 Dock 或开始菜单点击图标启动,那它继承的是图形会话的环境,nvm 在~/.zshrc里写的那些PATH修改根本不会被执行。
macOS 上这个问题的标准解法有两个:一是设置 nvm 的 default alias,并确保 nvm 的 node 路径被写进/etc/paths.d/或者做一个软链到/usr/local/bin;二是干脆用系统级安装包装一个 Node,让 nvm 只管项目级的版本切换。Windows 上相对简单,因为 nvm-windows 直接操作的是系统PATH里的符号链接目录,图形界面和终端看到的是同一个。
如果自动探测还是失败,HBuilderX 的设置里通常有手动指定可执行文件路径的入口(一般在运行配置或相关插件的配置项里),把node.exe或npm的绝对路径填进去即可。填的时候注意 Windows 上要写全.exe后缀,路径里有空格要确认不需要转义。
5.2 内置终端与外部命令的关系
HBuilderX 内置了终端面板(一般快捷键是Alt + T或从视图中打开),它默认调用系统 shell。Windows 上如果系统默认 shell 是 PowerShell,可能会遇到执行策略限制导致 npm 脚本跑不起来,报"因为在此系统上禁止运行脚本"。这种情况有两个解法:把执行策略改成RemoteSigned,或者把 HBuilderX 的终端配置成使用cmd.exe。
# PowerShell 执行策略调整(管理员权限运行) Set-ExecutionPolicy RemoteSigned -Scope CurrentUser我需要强调一点:HBuilderX 的内置终端和外部命令不是同一套环境。有些项目脚本在外部 Git Bash 里能跑通,在 HBuilderX 终端里报错,很多时候就是 shell 差异导致的引号转义、路径分隔符问题。遇到这类玄学,第一反应应该是换一个终端执行同样的命令,看是不是 shell 的问题。
5.3 npm 包在 uni-app 项目里的正确引入姿势
这是新手最容易迷糊的一块。HBuilderX 里创建的 uni-app 项目默认没有package.json,直接npm install xxx会报错或者生成一个奇怪的目录结构。正确做法是先初始化:
cd 你的项目目录 npm init -y npm install dayjs --savenpm init -y生成一个最小化的package.json,之后装包就正常了。装完之后在代码里import dayjs from 'dayjs'就能用。但要注意几个平台差异:
- H5 平台:直接可用,vite/webpack 会正常处理依赖。
- 微信小程序平台:需要"构建 npm"。uni-app 编译到小程序时,依赖会先被编译到
miniprogram_npm目录,微信开发者工具才能识别。如果报"模块未找到",多半是这个构建步骤没执行。 - App 平台:原生渲染层和逻辑层分离,只有支持 uni-app 的 JS 库能用,涉及 DOM 操作的库一律不可用。
另外强烈建议在项目根目录加.gitignore,把node_modules、unpackage(HBuilderX 的编译输出目录)、.hbuilderx排除掉。我见过有人把node_modules提交上去了,仓库直接涨到几百 MB,克隆一次十分钟。
6. 项目跑起来之后才会遇到的几类问题:端口、微信开发者工具、模块报错
环境搭好只是第一步,真正的问题都是运行之后才冒出来的。这一节我把三类最高频的故障按"完整排查链路"写出来,你照着顺序走,基本都能自己定位。
6.1 端口被占用:从报错到定位再到修复
先说结论:端口冲突不会自动解决,必须手动改或手动杀进程。HBuilderX 报"端口被占用"时,它不会告诉你占用者是谁,这是最让人抓狂的地方。
第一步,确认到底是哪个端口报冲突。报错信息里通常会带端口号,如果没有,看 HBuilderX 设置里的内置浏览器端口值。
第二步,找出占用者。Windows 上:
netstat -ano | findstr :8080 # 输出最后一列是 PID,比如 12345 tasklist | findstr 12345 taskkill /PID 12345 /FmacOS / Linux 上:
lsof -i :8080 kill -9 <PID>第三步,如果占用者是系统进程或者你不确定能不能杀,那就改端口。改的位置有三个,按优先级:HBuilderX 运行配置里的内置浏览器端口、项目manifest.json的 H5 配置、CLI 项目里的vite.config.js。三处都改掉才彻底,只改一处很可能换个地方又撞上。
第四步,重启 IDE。HBuilderX 的端口配置有缓存现象,改完不重启有时不生效。这也是为什么我一直建议把常用端口提前改好,别等冲突了才动。
经验:把内置端口设成 8081、8090、9527 这类冷门值,一次性配好,可以躲开九成的冲突。尤其是装了 Docker 的机器,Docker Desktop 会占用一批端口,8080 首当其冲。
6.2 HBuilderX 点不动微信开发者工具:一条完整排查链路
"微信开发者工具无法通过 HBuilderX 打开"这个问题的出现频率极高,我在群里几乎每周都能见到。它的成因有四五种,得按顺序排。
首先检查微信开发者工具的服务端口开关。打开微信开发者工具,进入 设置 → 安全设置,找到"服务端口"选项,确认它是开启状态。这个选项默认是关闭的,而 HBuilderX 正是通过这个端口来调用开发者工具的 CLI。这一步没开,后面所有配置都是白费。
第二,检查 HBuilderX 里配置的开发者工具安装路径。在 工具 → 设置 → 运行配置 里找到微信开发者工具路径,指向你实际安装的目录。注意有些机器上装了两个版本(稳定版和 Nightly 版),路径指向了错误的那一个。Windows 上路径要写到安装目录,macOS 上指向/Applications/wechatwebdevtools.app这一层。
第三,检查是否已经手动打开了一个开发者工具实例。微信开发者工具同一时间只允许一个实例接管项目。如果它已经开着并且打开着别的项目,HBuilderX 的调用可能被拒绝。解决办法是先关掉所有开发者工具窗口,再从 HBuilderX 里点运行。
第四,检查登录态。微信开发者工具需要扫码登录,未登录状态下 CLI 调用会失败,但 HBuilderX 的报错信息往往很含糊。这种情况打开开发者工具看一眼就知道。
第五,检查端口占用。开发者工具的 CLI 服务端口默认在 4 万段(比如 41539),如果被其他进程占了,也会连不上。可以用netstat -ano | findstr 4153之类的命令扫一遍。第五步走完还是不行,就重启两个软件,并且用管理员权限启动 HBuilderX 试试——有些系统权限限制会影响子进程调用。
6.3 Node 版本与依赖不匹配的两类典型报错
最后聊两个几乎每个 Node 使用者都会撞上的报错,它们的表象很像,根因完全不同。
第一个:The requested module 'node:util' does not provide an export named ...
看到node:这个前缀,说明代码用的是 Node 内置模块的带前缀写法。这个前缀在 Node 14.18 和 16 之后才完整支持,更早的版本会把它当成普通包名去解析。所以第一反应应该是查当前 Node 版本——node -v低于 16 的话,升上去再说。
如果版本已经够新还报这个错,那就是第二个原因:CJS 和 ESM 的互操作问题。某个依赖包用的是 ESM 的具名导入语法,但它本身是 CommonJS 模块,Node 的 ESM 加载器在静态分析时找不到对应的具名导出。这种情况通常出现在混合模块规范的项目里,解法是升级那个依赖到支持 ESM 的新版本,或者在配置文件里改用默认导入import pkg from 'pkg'再解构。用npm ls <包名>能快速定位是哪个包引入的。
第二个:N/A: version "v24.21.0" is not yet released or is not available
这条是 nvm 的报错,含义很直白:你本地没有装这个版本,或者这个版本号根本不存在。常见触发场景有两个:一是照着网上文章敲了个版本号,但那个版本已经被更新掉了或者还没发布;二是复制了别人package.json里的engines字段,直接拿去nvm use。
处理方式很简单:nvm ls-remote(macOS)或nvm list available(Windows)列出可用的版本,挑一个真实存在的装上;或者直接nvm install --lts装最新的 LTS。别去猜版本号,让 nvm 告诉你。
写着写着又想起一个细节:如果你在 CI 或者构建机上跑,nvm use是 shell 函数而不是可执行文件,在非交互式 shell 里可能不存在。这种情况下用.nvmrc配合nvm exec或者直接用绝对路径调用对应版本的 node,比在脚本里nvm use稳得多。
最后分享一个我自己一直在用的小习惯:每换一台机器,我会先建一个dev-setup.md的笔记文件,把上面这些命令原样记下来——换源、prefix 设置、HBuilderX 端口值、微信开发者工具路径。看起来有点笨,但实际上新机器从零到能跑项目,整个过程压缩到二十分钟以内,而且不用回忆任何东西。环境配置这件事,一次想清楚、记下来,比每次重新踩一遍要划算太多。