📦 NPM 依赖管理:Dependencies 与 DevDependencies 对前端打包的对比分析
package.json 中的 dependencies 和 devDependencies 字段,用于清晰地分离项目的运行时和构建时依赖。
一、核心区别:运行时 vs. 构建时
1. ⚙️ dependencies (生产环境依赖)
定义: 运行应用核心功能所必需的包。缺少则应用无法启动。
安装时机: 运行 npm install 时总是安装;作为依赖被安装时自动安装。
典型示例: Vue, Vuetify, Pinia, Vue-Router 等框架和核心功能库。
2. 🛠️ devDependencies (开发环境依赖)
定义: 仅用于开发、测试、构建过程的工具。不进入生产环境。
安装时机: 运行 npm install 时安装;使用 --production 标志时不会安装。
典型示例: Vite, ESLint, Prettier, Husky, Mockjs 等构建或质量工具。
对比总结
| 特性 | dependencies | devDependencies |
|---|---|---|
| 用途 | 应用运行时的核心功能 | 应用开发、测试、构建时的辅助工具 |
| 生产环境 | 必需,打包进生产代码 | 非必需,通常不进入生产构建 |
| 安装方式 | 总是安装 | --production 时不安装 |
二、安装方式对 dist 包大小的影响
前端项目使用 npm install 或 npm install --production 安装依赖后,对运行 npm run build 生成的 dist 包大小通常没有直接区别。
原因: 现代构建工具(如 Vite)仅打包代码中实际导入的模块。它会智能地忽略未被引用的 devDependencies(如 ESLint、Husky 等),因此最终的运行时代码体积保持不变。
实际应用场景(CI/CD)
| 阶段 | 目的 | 推荐的安装方式 |
|---|---|---|
| 构建阶段 | 运行 npm run build | npm install (需安装 Vite 等构建工具) |
| 部署阶段 | 生产服务器或 Docker 运行 | npm install --production (减小部署体积) |
三、Git 与 NPM 流程的结合(补充)
- Git 钩子冲突: 删除
scripts.prepare可防止 Husky 自动安装钩子,避免覆盖根仓库钩子。 package-lock.json: 仅关注包版本锁定,更改scripts字段无需修改package-lock.json。