--- title: "1.5 包管理与项目配置" description: "理解 nvm 和 pnpm 的工作原理" chapter: "第一章" --- # 1.5 包管理与项目配置 > **阅读完本节后,你将会收获:** > > - 理解 nvm 和 pnpm 的工作原理 > - 掌握常用的 pnpm 命令(包括全局安装) > - 理解 package.json、pnpm-lock.yaml 等核心配置文件的作用 ::: tip 还没安装环境? 如果你还没有安装 Node.js 和 pnpm,请参考 [1.0 快速开始](./00-quick-start.md) 完成安装。 ::: ## 基本概念 **Node.js** 是 JavaScript 运行时环境,让 JS 能在服务器端运行。现代前端构建工具都依赖它。 **LTS**(Long Term Support)是长期支持版本,比 Current 更稳定,推荐用于开发。 **nvm**(Node Version Manager)让你在同一台电脑上安装和切换多个 Node.js 版本。 **pnpm** 是包管理器,用于安装项目依赖。相比 npm,它更快、更节省磁盘空间。 ## 为什么选择 pnpm? | 特性 | npm | pnpm | |------|-----|------| | 速度 | 基准 | **快 2-3 倍** | | 磁盘空间(10项目) | ~5GB | **~1.5GB** | pnpm 使用**硬链接**让所有项目共享同一份依赖文件,而不是每个项目都复制一份。 ::: details 🎮 点击体验:npm vs pnpm 安装对比 > 💡 **练习**:依次点击"项目 A/B/C",观察 npm 和 pnpm 的磁盘占用变化 > > 🎯 **核心概念**:pnpm 通过硬链接共享依赖,多项目场景下节省大量磁盘空间 ::: ## pnpm 常用命令 ### 项目依赖命令 | 命令 | 作用 | |------|------| | `pnpm init` | 初始化项目 | | `pnpm install` | 安装所有依赖 | | `pnpm add xxx` | 安装生产依赖(xxx 替换为包名,如 React) | | `pnpm add -D xxx` | 安装开发依赖(xxx 替换为包名,如 TypeScript) | | `pnpm remove xxx` | 卸载包 | | `pnpm dev` | 运行脚本(等同于 pnpm run dev) | ::: tip add 和 add -D 的区别? - **add xxx**:生产依赖,项目运行时需要 - **add -D xxx**:开发依赖,仅开发时需要 不确定的话,让 AI 决定用哪个。 ::: ### 全局安装命令 除了项目依赖,你还可以用 npm 安装**全局工具**——这些工具可以在电脑的任何位置使用: ```bash # 安装全局 CLI 工具 npm install -g @anthropic-ai/claude-code ``` **全局安装 vs 项目安装**: | | 全局安装 | 项目安装 | |---|---------|---------| | **命令** | `npm install -g xxx` | `pnpm add xxx` | | **位置** | 系统目录,所有项目可用 | 当前项目的 node_modules | | **用途** | CLI 工具(如 Claude Code) | 项目依赖(如 React) | | **示例** | claude、http-server | react、lodash | ::: tip 什么时候全局安装? - **CLI 工具**:如 Claude Code、http-server、create-react-app - **系统级工具**:如 nrm(镜像源管理)、vercel(部署工具) 普通项目依赖(如 React、Vue)应该安装在项目内,不要全局安装。 ::: ## 核心配置文件 **什么是配置文件?** 配置文件是记录项目元数据的纯文本文件,告诉包管理器这个项目需要什么依赖、如何运行。它们放在项目的**根目录**(最外层文件夹)下。 **为什么每个项目都有?** 因为每个项目依赖的第三方库不同——有的用 React,有的用 Vue;有的需要特定版本,有的需要最新版。配置文件记录了这些差异,确保任何人拿到代码后都能还原出相同的开发环境。 **为什么需要它们?** 想象一下没有配置文件的情况:你下载了一个开源项目,但不知道它需要什么依赖、怎么启动。配置文件解决了这个问题——`pnpm install` 会根据配置自动下载所有依赖,`pnpm dev` 知道如何启动项目。 ### package.json 项目描述文件,记录依赖和脚本: ```json { "dependencies": { "react": "^18.0.0" }, "devDependencies": { "typescript": "^5.0.0" } } ``` ::: details 🎮 点击体验:package.json 交互式查看器 > 💡 **练习**:点击左侧 JSON 中的任意字段,查看它的作用和相关命令 > > 🎯 **核心概念**:package.json 是项目的"身份证",记录了依赖、脚本和元数据 ::: ### pnpm-lock.yaml 自动生成的锁文件,记录每个依赖的精确版本。确保所有人安装的版本**完全一致**,避免"在我电脑上能跑"问题。 **注意事项**: - 自动生成,**不要手动修改** - 必须提交到 Git ### .nvmrc(可选) 指定项目推荐的 Node.js 版本: ```bash # .nvmrc 文件内容 24 ``` 大多数项目没有这个文件,用最新 LTS 即可。有此文件时,运行 `nvm use` 自动切换。 ## 拓展:什么时候需要 nvm? ::: tip 已经安装好了? 如果你按照 [1.0 快速开始](./00-quick-start.md) 完成了安装,nvm 已经安装好了(Mac/Linux 通过脚本自动安装,Windows 用户可选择安装)。 ::: 不同项目可能需要不同版本的 Node.js: ```mermaid graph TB A[你的电脑] --> B[nvm] B --> C[Node.js 20.x] B --> D[Node.js 24.x] C --> E[老项目A] D --> F[新项目B] ``` **什么时候需要切换版本**:老项目维护、兼容性测试。大多数新项目用最新 LTS 即可。 ## 常见问题 ### Q: nvm 命令提示 `command not found` 需要重新加载配置或重启终端: ```bash source ~/.zshrc # 如果使用 zsh source ~/.bashrc # 如果使用 bash ``` ### Q: 如何查看项目需要哪个 Node.js 版本? 查看 `package.json` 中的 `engines` 字段,或项目根目录的 `.nvmrc` 文件。 ### Q: npm 项目可以迁移到 pnpm 吗? 可以,完全兼容: ```bash rm -rf node_modules package-lock.json pnpm install ``` > **这条命令做了什么**:删除 npm 的依赖文件夹和锁文件,然后用 pnpm 重新安装。 ## 核心理念 **nvm 解决版本冲突,pnpm 提升安装效率**。 - ✅ 多项目可以使用不同 Node.js 版本 - ✅ pnpm 复用依赖,安装快速、节省空间 - ✅ pnpm 严格模式,避免"幽灵依赖" ## 相关内容 - 详见:[1.4 Terminal 终端入门](./04-terminal-basics.md) - 详见:[nvm 中文官网](https://nvm.uihtm.com/) - 前置:[1.0 快速开始](./00-quick-start.md) - 前置:[1.2 技术栈概念](./02-tech-stack.md)