📦 NPM 依赖管理:Dependencies 与 DevDependencies对比分析

173 阅读2分钟

📦 NPM 依赖管理:Dependencies 与 DevDependencies 对前端打包的对比分析

package.json 中的 dependenciesdevDependencies 字段,用于清晰地分离项目的运行时构建时依赖。

一、核心区别:运行时 vs. 构建时

1. ⚙️ dependencies (生产环境依赖)

定义: 运行应用核心功能所必需的包。缺少则应用无法启动。

安装时机: 运行 npm install 时总是安装;作为依赖被安装时自动安装。

典型示例: Vue, Vuetify, Pinia, Vue-Router 等框架和核心功能库。

2. 🛠️ devDependencies (开发环境依赖)

定义: 仅用于开发、测试、构建过程的工具。不进入生产环境。

安装时机: 运行 npm install 时安装;使用 --production 标志时不会安装。

典型示例: Vite, ESLint, Prettier, Husky, Mockjs 等构建或质量工具。

对比总结

特性dependenciesdevDependencies
用途应用运行时的核心功能应用开发、测试、构建时的辅助工具
生产环境必需,打包进生产代码非必需,通常不进入生产构建
安装方式总是安装--production 时不安装

二、安装方式对 dist 包大小的影响

前端项目使用 npm installnpm install --production 安装依赖后,对运行 npm run build 生成的 dist 包大小通常没有直接区别

原因: 现代构建工具(如 Vite)仅打包代码中实际导入的模块。它会智能地忽略未被引用的 devDependencies(如 ESLint、Husky 等),因此最终的运行时代码体积保持不变。

实际应用场景(CI/CD)

阶段目的推荐的安装方式
构建阶段运行 npm run buildnpm install (需安装 Vite 等构建工具)
部署阶段生产服务器或 Docker 运行npm install --production (减小部署体积)

三、Git 与 NPM 流程的结合(补充)

  • Git 钩子冲突: 删除 scripts.prepare 可防止 Husky 自动安装钩子,避免覆盖根仓库钩子。
  • package-lock.json 仅关注包版本锁定,更改 scripts 字段无需修改 package-lock.json