npm install 是 Node.js 项目中用于安装依赖包的核心命令。它支持多种参数,用于控制依赖的类型、安装方式、作用域等。以下是 常用参数的详细说明及使用场景(基于 npm v7+)。
🧩 一、基础语法
npm install [package-name] [options]
若不指定包名,则读取 package.json 安装所有依赖。
📌 二、常用参数详解
- -S / --save
-
作用:将包添加到 dependencies(生产依赖)
-
默认行为:npm v5+ 起,npm install 默认等同于 -S
-
使用场景:
- 安装运行时必需的库(如 react, axios, lodash)
-
示例:
npm install axios等价于
npm install --save axios
✅ 推荐显式使用 -S 提高可读性(尤其在脚本或文档中)
- -D / --save-dev
- 作用:将包添加到 devDependencies(开发依赖)
- 使用场景:
- 构建工具(webpack, vite)
- 测试框架(jest, cypress)
- Lint/格式化(eslint, prettier)
- 类型定义(@types/node)
- 示例:
npm install -D eslint
⚠️ 生产环境执行 npm install --production 时会跳过这些包
- -O / --save-optional
- 作用:添加到 optionalDependencies
- 特点:
- 安装失败不会中断整个 npm install
- 适合非关键依赖(如平台特定插件)
- 使用场景:
- 可选功能模块(如 fsevents 在 macOS 上优化文件监听)
- 示例:
npm install -O fsevents
- -E / --save-dev-exact ❌(错误!正确是 --save-exact)
实际应为:-E / --save-exact
-
作用:精确版本号(不带 ^ 或 ~)
-
默认行为:npm 默认使用 ^1.2.3(允许兼容更新)
-
使用场景:
- 需要严格锁定版本(避免自动升级引入 breaking change)
- 企业级项目、CI/CD 环境
-
示例:
npm install -E lodashpackage.json 中记录为 "lodash": "4.17.21"
- --no-save
- 作用:临时安装,不写入 package.json
- 使用场景:
- 快速测试某个包
- 本地调试(不希望污染依赖配置)
- 示例:
npm install --no-save moment
💡 安装后仅存在于 node_modules,下次 npm install 不会恢复
- --global / -g
-
作用:全局安装(不在当前项目)
-
使用场景:
- CLI 工具(如 create-react-app, typescript 的 tsc)
-
示例:
npm install -g typescript
-
注意:
- 全局包不会出现在 package.json
- 不建议在项目依赖中使用全局包(破坏可复现性)
- --legacy-peer-deps
- 作用:忽略 peerDependencies 冲突(npm v7+ 默认严格处理)
- 使用场景:
- 老项目升级 npm 后出现大量 peer dep 报错
- 第三方库未及时更新 peer 依赖声明
- 示例:
npm install --legacy-peer-deps
⚠️ 属于"降级兼容"方案,长期应修复依赖问题
- --force
- 作用:强制重新下载所有依赖(无视缓存)
- 使用场景:
- 依赖缓存损坏
- 怀疑本地包与远程不一致
- 示例:
npm install --force
🔥 慎用!会清除缓存并重新拉取,耗时较长
- --production
- 作用:仅安装 dependencies,跳过 devDependencies
- 使用场景:
- Docker 构建生产镜像
- 部署服务器安装依赖
- 示例:
npm install --production
✅ 生产环境最佳实践:减少体积、提升安全
- --ignore-scripts
- 作用:跳过 preinstall/postinstall 等生命周期脚本
- 使用场景:
- 安全审计(防止恶意脚本执行)
- 调试安装问题
- 示例:
npm install --ignore-scripts
⚠️ 某些包(如 node-sass)依赖 postinstall 编译,跳过后可能无法使用
🧪 三、组合使用示例
场景 命令
安装生产依赖(精确版本) npm install -SE react
安装开发依赖(不保存) npm install -D --no-save jest
生产环境部署 npm install --production --ignore-scripts
修复依赖冲突 npm install --legacy-peer-deps --force
📚 四、附:package.json 依赖字段说明
字段 用途 安装命令
dependencies 运行时必需 -S 或默认
devDependencies 开发阶段使用 -D
optionalDependencies 可选依赖 -O
peerDependencies 插件要求宿主提供(如 React 组件库) 自动处理
✅ 最佳实践建议
- 明确区分依赖类型:避免将开发工具误装为生产依赖
- 生产环境用 --production:减小镜像体积
- 谨慎使用 --force / --legacy-peer-deps:仅作为临时解决方案
- 团队统一 npm 版本:避免因 peer deps 行为差异导致问题
- 优先使用 package-lock.json:确保依赖可复现
如需查看完整参数列表,可运行:
npm help install