Node.js开发环境搭建
前端项目从0到1搭建开发环境是每个工程师的必经之路。随着项目数量增多、依赖变复杂,Node.js版本与依赖包之间的冲突几乎是不可避免的。本节从版本管理、包管理器选择到完整工作流,给出一份实用的环境搭建指南。
理解Node.js
Node.js是基于Chrome V8引擎的JavaScript运行环境。需要注意的是:
- Node.js是JavaScript的后端运行环境(正常情况下安装到服务器上)
- Node.js中无法调用DOM和BOM等浏览器内置API
Node.js版本管理:为什么需要NVM
直接在系统上安装Node.js虽然简单,但当多个项目需要不同版本时就会遇到兼容性问题。NVM(Node Version Manager)是解决这个问题的标准方案,它允许在同一台机器上安装和切换多个Node.js版本。
NVM安装(macOS/Linux)
# 官方安装脚本
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# 或者使用国内镜像(gitee)
curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash
bash
安装完成后,需要在shell配置文件中添加环境变量:
- M1芯片Mac:
~/.zprofile - Intel芯片Mac:
~/.bash_profile、~/.zshrc、~/.profile或~/.bashrc
添加以下内容并重启终端:
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"
bash
国内加速配置:
export NVM_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node
bash
NVM常用命令
# 查看本地已安装的版本
nvm ls
# 查看远程可安装的版本(macOS & Linux)
nvm ls-remote
# 安装指定版本(推荐LTS长期支持版)
nvm install 22
# 切换到指定版本
nvm use 22
# 设置别名
nvm alias v22 22
# 设置默认版本
nvm alias default 22
# 查看当前使用的版本
nvm current
# 删除别名
nvm unalias v22
bash
NVM安装(Windows)
Windows用户可以使用 nvm-windows,提供了安装包和解压即用两种方式。建议直接使用nvm-setup.exe安装包,安装后通过命令行操作:
nvm install 22
nvm use 22
nvm list
bash
Node.js版本选择
| 版本线 | 状态 | 推荐场景 |
|---|---|---|
| Node.js 22 LTS | 当前LTS(2024.10-2027.04) | 生产环境首选 |
| Node.js 20 LTS | 维护中(2023.10-2026.04) | 现有项目维护 |
| Node.js 24 | Current(非LTS) | 尝鲜新特性 |
本课程项目统一基于Node.js 22 LTS版本进行开发。
包管理器对比与选择
Node.js生态中有三大主流包管理器,各有特点:
| 特性 | npm | yarn | pnpm |
|---|---|---|---|
| 安装方式 | Node.js自带 | 需单独安装 | 需单独安装 |
| 安装速度 | 基准 | 快(并行) | 最快(硬链接) |
| 磁盘占用 | 每项目独立 | 每项目独立 | 全局共享(软链接) |
| monorepo支持 | workspaces | workspaces | workspace(原生支持) |
| lock文件 | package-lock.json | yarn.lock | pnpm-lock.yaml |
npm(Node Package Manager)是Node.js默认的包管理工具,随Node.js自动安装。npm不需要额外安装,管理node包(模块)。
yarn的特点是扁平化依赖、并行安装、本地缓存,安装命令:npm i -g yarn
pnpm的核心优势在于内容寻址存储机制。pnpm创建非扁平化的node_modules文件夹,使用软链接的方式将项目的直接依赖添加进模块目录的根目录。使用npm或Yarn安装依赖时,所有包被提升到模块目录根目录,项目可以访问到未被添加的依赖(幽灵依赖)。pnpm的严格依赖隔离避免了这个问题。
全局仓库中每个包只保存一份,项目中的node_modules通过硬链接指向全局存储:
- 首次安装后的项目安装速度极快
- 磁盘空间占用大幅减少(10个项目可能只占1份空间)
- 严格的依赖隔离,避免幽灵依赖问题
安装:npm i -g pnpm
npm常用命令:
# 安装模块
npm install 模块名
npm i 模块名 # 简写
npm i 模块名 模块名 模块名 # 一次性安装多个
# 卸载模块
npm uninstall 模块名
bash
关于本地模块的说明:
- 下载安装的模块存放在当前文件夹的
node_modules中,同时生成package-lock.json - 模块在当前文件夹及其所有子文件夹中都可以使用
- 查找模块时,先在当前文件夹的
node_modules中查找,找不到则向上层查找
重要:代码文件夹不能有中文;代码文件夹不能和模块名同名。
国内加速源配置
由于网络原因,直接使用npm安装依赖速度较慢。推荐配置淘宝镜像源:
# 安装cnpm(用于全局包安装和下载大文件)
npm install -g cnpm --registry=https://registry.npmmirror.com
# 设置npm默认使用淘宝源
npm config set registry https://registry.npmmirror.com
# 验证设置
npm config get registry
# 设置yarn使用淘宝源
yarn config set registry https://registry.npmmirror.com
# 设置pnpm使用淘宝源
pnpm config set registry https://registry.npmmirror.com
# 也可以使用其他镜像源
npm config set registry http://mirrors.cloud.tencent.com/npm/
npm config set registry https://mirrors.huaweicloud.com/repository/npm/
bash
Corepack:官方包管理器管理工具
Corepack是Node.js官方推出的包管理器代理工具,从Node.js 16.9开始内置。它的作用是让你无需全局安装yarn或pnpm就能使用它们:
# 启用Corepack
corepack enable
# 准备指定版本的pnpm
corepack prepare pnpm@latest --activate
# 在项目中指定包管理器版本(package.json)
# "packageManager": "pnpm@9.15.0"
bash
Corepack的优势是项目级别的包管理器版本控制。当团队成员执行pnpm install时,Corepack会自动下载packageManager字段指定的版本,确保所有人使用完全相同的包管理器版本。
版本号管理
npm version命令管理package.json中的version属性。相比git tag,npm version = 修改package.json中的version + git tag打标签。
预发布相关命令:prerelease、prepatch、preminor、premajor
正式发布相关命令:patch、minor、major
推荐开发工作流
1. 安装NVM → 管理Node.js版本
2. 安装cnpm → 使用淘宝源安装全局工具
3. 使用cnpm安装yarn和pnpm → cnpm install -g yarn pnpm
4. 设置npm/pnpm/yarn的registry为淘宝源
5. 日常开发使用pnpm安装项目依赖
6. 发布包时切换回npm官方源
text
# 发布时临时使用官方源
npm publish --registry https://registry.npmjs.org
bash
AI辅助开发工具补充(2026实战版)
在环境搭建环节,AI工具已经能够提供实质性的效率提升:
| 工具 | 功能 | 价格 | 推荐场景 |
|---|---|---|---|
| GitHub Copilot CLI | 命令行智能补全、解释错误 | 10美元/月 | 不熟悉命令的新手 |
| Cursor终端 | AI辅助终端命令 | 免费版可用 | 日常开发 |
| Warp | AI驱动的现代终端 | 免费版可用 | macOS用户 |
| 豆包CLI | 国内可用的AI命令行助手 | 免费 | 国内开发者 |
零成本方案:Warp免费版 + 豆包CLI,命令行操作效率可提升30%以上。
↑