npm 包管理工具完整指南 | npm、pnpm、yarn 深度对比与实战
npm 简介
npm(Node Package Manager)是 Node.js 的官方包管理工具,也是世界上最大的软件注册表,拥有超过 200 万个包。它能帮助开发者轻松管理项目依赖、共享代码和控制版本。
💡 本文特点
- 全面讲解 npm、pnpm、yarn 三大包管理器
- 配有详细的命令示例和对比表格
- 包含丰富的实战案例和最佳实践
- 适合初学者入门和进阶开发者参考
环境准备
安装 Node.js
npm 随 Node.js 一起安装,无需单独安装。
下载地址: https://nodejs.org/
💡 版本选择建议
- LTS(长期支持版):✅ 推荐生产环境使用,稳定可靠,官方长期维护
- Current(当前版):包含最新特性,适合尝鲜和学习新特性
- 建议:生产项目使用 LTS 版,个人学习可使用 Current 版
验证安装:
# 查看 Node.js 版本
node -v
# 输出示例: v20.11.0
# 查看 npm 版本
npm -v
# 输出示例: 10.2.4
配置 npm 镜像源
⚠️ 为什么需要配置镜像源?
由于网络原因,直接从 npm 官方源下载包可能非常慢或失败。配置国内镜像源可以:
- ✅ 显著提升下载速度(可提升 10-20 倍)
- ✅ 提高安装成功率
- ✅ 改善开发体验
方式 1:临时使用镜像源
# 单次安装使用淘宝镜像
npm install axios --registry=https://registry.npmmirror.com
方式 2:永久配置镜像源(推荐)
# 设置淘宝镜像(推荐)
npm config set registry https://registry.npmmirror.com
# 查看当前镜像源
npm config get registry
# 输出: https://registry.npmmirror.com/
# 恢复官方源
npm config set registry https://registry.npmjs.org
方式 3:使用 nrm 管理镜像源
# 全局安装 nrm(镜像源管理工具)
npm install -g nrm
# 查看所有可用镜像源
nrm ls
# * npm -------- https://registry.npmjs.org/
# yarn ------- https://registry.yarnpkg.com/
# taobao ----- https://registry.npmmirror.com/
# tencent ---- https://mirrors.cloud.tencent.com/npm/
# 切换到淘宝镜像
nrm use taobao
# 测试镜像源速度
nrm test taobao
配置 npm 其他选项
# 查看所有配置
npm config list
# 设置全局安装路径(Windows)
npm config set prefix "D:\nodejs\node_global"
npm config set cache "D:\nodejs\node_cache"
# 设置全局安装路径(Mac/Linux)
npm config set prefix "/usr/local"
# 查看全局安装路径
npm config get prefix
# 删除某个配置
npm config delete registry
npm 常用命令
项目初始化
# 初始化项目(交互式)
npm init
# 会询问项目名称、版本、描述等信息
# 快速初始化(使用默认值)
npm init -y
# 或
npm init --yes
# 使用指定模板初始化
npm create vite@latest my-app
npm create react-app my-app
生成的 package.json 示例:
{
"name": "my-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
安装依赖包
基本安装
# 安装单个包(最新版本)
npm install axios
# 或简写
npm i axios
# 安装指定版本
npm install [email protected]
# 安装多个包
npm install axios vue react
# 安装所有依赖(根据 package.json)
npm install
依赖类型
# 生产依赖(默认)- 运行时需要
npm install axios
npm install axios --save # --save 是默认行为,可省略
npm install axios -S # 简写
# 开发依赖 - 仅开发时需要
npm install eslint --save-dev
npm install eslint -D # 简写
# 全局安装 - 所有项目可用
npm install -g typescript
npm install --global typescript
# 可选依赖 - 安装失败不影响项目
npm install fsevents --save-optional
npm install fsevents -O
# Peer 依赖(通常在库开发中使用)
npm install react --save-peer
📌 依赖类型说明
不同类型的依赖会被记录在 package.json 的不同字段中:
package.json 中的依赖记录:
{
"dependencies": {
"axios": "^1.6.0", // 生产依赖
"vue": "^3.4.0"
},
"devDependencies": {
"eslint": "^8.56.0", // 开发依赖
"vite": "^5.0.0"
},
"peerDependencies": {
"react": "^18.0.0" // 同级依赖
},
"optionalDependencies": {
"fsevents": "^2.3.3" // 可选依赖
}
}
安装选项
# 只安装生产依赖(部署时使用)
npm install --production
npm install --omit=dev
# 强制重新安装所有包
npm install --force
# 不生成 package-lock.json
npm install --no-package-lock
# 不执行任何脚本(安全考虑)
npm install --ignore-scripts
更新依赖包
# 更新单个包到最新版本
npm update axios
npm update axios -g # 更新全局包
# 更新所有包
npm update
# 查看过期的包
npm outdated
# 输出示例:
# Package Current Wanted Latest Location
# axios 1.5.0 1.6.0 1.6.2 node_modules/axios
# 安装最新版本(忽略 package.json 版本范围)
npm install axios@latest
卸载依赖包
# 卸载包
npm uninstall axios
npm uninstall axios -D # 卸载开发依赖
npm uninstall axios -g # 卸载全局包
# 简写
npm un axios
npm remove axios
npm rm axios
查看包信息
# 查看已安装的包
npm list
npm ls # 简写
npm ls --depth=0 # 只显示顶层依赖
# 查看全局安装的包
npm list -g --depth=0
# 查看包的详细信息
npm view axios
npm info axios # 别名
# 查看包的所有版本
npm view axios versions
# 查看包的最新版本
npm view axios version
# 搜索包
npm search axios
运行脚本
# 运行 package.json 中定义的脚本
npm run dev
npm run build
npm run test
# 运行内置脚本(可省略 run)
npm start # 等同于 npm run start
npm test # 等同于 npm run test
npm stop
npm restart
# 查看所有可用脚本
npm run
# 传递参数给脚本
npm run build -- --mode=production
package.json 脚本示例:
{
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"test": "vitest",
"lint": "eslint . --ext .js,.vue",
"format": "prettier --write ."
}
}
缓存管理
# 查看缓存目录
npm config get cache
# 清除缓存
npm cache clean --force
# 验证缓存完整性
npm cache verify
其他实用命令
# 检查项目中的安全漏洞
npm audit
npm audit fix # 自动修复漏洞
# 发布包到 npm
npm publish
# 登录 npm 账号
npm login
# 查看当前登录用户
npm whoami
# 打开包的主页
npm home axios
# 打开包的 GitHub 仓库
npm repo axios
# 打开包的文档
npm docs axios
# 执行包的二进制文件
npx eslint .
npx create-react-app my-app
package.json 详解
package.json
是项目的核心配置文件,包含项目元数据、依赖关系和脚本等信息。
基本字段
{
// 项目名称(必填,小写,不能有空格)
"name": "my-project",
// 版本号(必填,遵循语义化版本)
"version": "1.0.0",
// 项目描述
"description": "A sample project",
// 入口文件
"main": "index.js",
// 关键词(用于 npm 搜索)
"keywords": ["vue", "component", "ui"],
// 作者
"author": "Your Name <[email protected]>",
// 许可证
"license": "MIT",
// 仓库地址
"repository": {
"type": "git",
"url": "https://github.com/username/repo.git"
},
// Bug 反馈地址
"bugs": {
"url": "https://github.com/username/repo/issues"
},
// 项目主页
"homepage": "https://github.com/username/repo#readme"
}
依赖字段
{
// 生产依赖(运行时需要)
"dependencies": {
"axios": "^1.6.0",
"vue": "~3.4.0",
"react": "18.2.0"
},
// 开发依赖(仅开发时需要)
"devDependencies": {
"vite": "^5.0.0",
"eslint": "^8.56.0",
"typescript": "^5.3.0"
},
// 同级依赖(供其他包使用)
"peerDependencies": {
"react": "^18.0.0"
},
// 可选依赖(安装失败不影响项目)
"optionalDependencies": {
"fsevents": "^2.3.3"
}
}
💡 语义化版本号规则
版本号格式:主版本号.次版本号.修订号 (如 1.2.3)
符号 | 示例 | 含义 | 应用场景 |
---|---|---|---|
^ | ^1.2.3 | 兼容 1.x.x 版本(默认) | ✅ 大多数情况推荐 |
~ | ~1.2.3 | 兼容 1.2.x 版本 | 小版本更新 |
无 | 1.2.3 | 精确版本 | ✅ 生产环境推荐 |
>= | >=1.2.3 | 大于等于 1.2.3 | 灵活范围 |
1.2.x | 1.2.x | 1.2 的任意版本 | 固定次版本 |
* | * | 任意版本 | ❌ 不推荐使用 |
示例说明:
^1.2.3
可升级到1.9.9
,但不能升级到2.0.0
~1.2.3
可升级到1.2.9
,但不能升级到1.3.0
脚本字段
{
"scripts": {
// 开发环境
"dev": "vite",
"serve": "vite preview",
// 构建
"build": "vite build",
"build:prod": "vite build --mode production",
// 测试
"test": "vitest",
"test:ui": "vitest --ui",
"test:coverage": "vitest --coverage",
// 代码质量
"lint": "eslint . --ext .js,.ts,.vue",
"lint:fix": "eslint . --ext .js,.ts,.vue --fix",
"format": "prettier --write .",
// 生命周期钩子
"preinstall": "echo 'Before install'",
"postinstall": "echo 'After install'",
"prepublish": "npm run build",
// 自定义脚本
"clean": "rimraf dist",
"deploy": "npm run build && gh-pages -d dist"
}
}
📌 npm 生命周期钩子
npm 提供了一系列生命周期钩子,可在特定操作前后自动执行脚本:
preinstall
/postinstall
:安装依赖前后执行preuninstall
/postuninstall
:卸载依赖前后执行prepublish
/postpublish
:发布包前后执行pretest
/posttest
:运行测试前后执行preversion
/postversion
:版本更新前后执行
实际应用示例:
{
"scripts": {
"preinstall": "node check-node-version.js",
"postinstall": "node setup.js",
"prebuild": "npm run clean",
"build": "vite build",
"postbuild": "npm run copy-assets"
}
}
其他重要字段
{
// Node.js 版本要求
"engines": {
"node": ">=18.0.0",
"npm": ">=9.0.0"
},
// 私有包(防止意外发布)
"private": true,
// 发布包含的文件
"files": [
"dist",
"lib",
"README.md",
"LICENSE"
],
// 模块类型
"type": "module", // 使用 ES Modules
// "type": "commonjs" // 使用 CommonJS(默认)
// 导出配置(Node.js 12+)
"exports": {
".": {
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
}
},
// 浏览器入口
"browser": "dist/index.browser.js",
// TypeScript 类型定义
"types": "dist/index.d.ts",
// 可执行文件
"bin": {
"my-cli": "./bin/cli.js"
}
}
package-lock.json
📌 package-lock.json 的重要性
package-lock.json
是 npm 5+ 引入的重要特性,它锁定依赖的精确版本,确保团队成员和 CI/CD 环境安装完全相同的依赖。
主要作用:
- ✅ 锁定版本:记录所有依赖的精确版本号,避免 "works on my machine" 问题
- ✅ 加速安装:包含完整的依赖树信息,减少解析时间
- ✅ 提高安全性:记录包的完整性哈希(integrity hash),防止篡改
- ✅ 可重现构建:确保任何时间、任何环境都能复现相同的构建结果
最佳实践:
# ✅ 务必提交到 Git
git add package-lock.json
git commit -m "chore: update dependencies"
# ✅ CI/CD 中使用 npm ci 而非 npm install
npm ci # 更快、更安全、严格按照 lock 文件安装
# ❌ 不要手动修改 package-lock.json
# 如需更新,使用 npm 命令:
npm update axios # 更新单个包
npm update # 更新所有包
⚠️ 常见误区
- ❌ 删除 package-lock.json 解决安装问题(应该保留它)
- ❌ 将 package-lock.json 添加到 .gitignore(应该提交它)
- ❌ 手动编辑 package-lock.json(使用 npm 命令管理)
pnpm - 快速高效的包管理器
pnpm(performant npm)是一个快速、节省磁盘空间的包管理器。
pnpm 优势
🔥 为什么选择 pnpm?
pnpm 是新一代包管理器,在性能和磁盘空间使用上有显著优势:
- ⚡ 速度快:比 npm 快 2-3 倍,安装大型项目时更明显
- 💾 节省空间:使用全局 store + 硬链接,同一包的不同版本只存一次,可节省 50-70% 磁盘空间
- 🔒 严格依赖:只能访问 package.json 中声明的依赖,彻底解决幽灵依赖问题
- 🎯 原生 monorepo:内置 workspace 支持,不需额外工具
- 🛡️ 更安全:严格的依赖结构,减少安全隐患
实际效果对比:
# 例:安装 React 项目依赖(约 1200 个包)
npm install # 约 45 秒,磁盘占用 350MB
pnpm install # 约 18 秒,磁盘占用 120MB
安装 pnpm
# 使用 npm 安装(推荐)
npm install -g pnpm
# 使用官方脚本(Mac/Linux)
curl -fsSL https://get.pnpm.io/install.sh | sh -
# 使用官方脚本(Windows PowerShell)
iwr https://get.pnpm.io/install.ps1 -useb | iex
# 验证安装
pnpm -v
pnpm 常用命令
# 初始化项目
pnpm init
# 安装依赖
pnpm install # 安装所有依赖
pnpm i # 简写
# 添加依赖
pnpm add axios # 添加生产依赖
pnpm add -D vite # 添加开发依赖
pnpm add -g typescript # 全局安装
# 更新依赖
pnpm update axios
pnpm up axios # 简写
pnpm update # 更新所有
# 删除依赖
pnpm remove axios
pnpm rm axios # 简写
# 运行脚本
pnpm run dev
pnpm dev # 自定义脚本可省略 run
pnpm start # 内置脚本
pnpm test
# 查看依赖
pnpm list
pnpm ls --depth=0
# 查看全局包
pnpm list -g
# 执行包
pnpm exec eslint .
pnpm dlx create-react-app my-app # 类似 npx
pnpm 配置
# 查看配置
pnpm config list
# 设置镜像源
pnpm config set registry https://registry.npmmirror.com
# 查看镜像源
pnpm config get registry
# 设置全局安装路径
pnpm config set global-dir "D:\pnpm\global"
pnpm config set global-bin-dir "D:\pnpm"
pnpm config set cache-dir "D:\pnpm\cache"
pnpm Workspace(工作区)
pnpm 原生支持 monorepo 管理。
pnpm-workspace.yaml:
packages:
# 所有 packages 下的包
- 'packages/*'
# 排除测试目录
- '!**/test/**'
Workspace 命令:
# 为所有包安装依赖
pnpm install
# 为指定包添加依赖
pnpm --filter my-package add axios
# 运行所有包的脚本
pnpm -r run build
# 只运行改动包的脚本
pnpm --filter ./packages/* run test
Yarn - Facebook 的包管理器
Yarn 是 Facebook 开发的包管理器,与 npm 兼容。
Yarn 安装
# 使用 npm 安装
npm install -g yarn
# 验证安装
yarn -v
Yarn 常用命令
# 初始化项目
yarn init
yarn init -y
# 安装依赖
yarn install
yarn # 简写
# 添加依赖
yarn add axios
yarn add -D vite # 开发依赖
yarn global add typescript # 全局安装
# 更新依赖
yarn upgrade axios
yarn upgrade # 更新所有
# 删除依赖
yarn remove axios
# 运行脚本
yarn run dev
yarn dev # 可省略 run
# 查看依赖
yarn list
yarn list --depth=0
# 查看过期包
yarn outdated
# 清除缓存
yarn cache clean
Yarn 2+(Berry)
Yarn 2+ 引入了 Plug'n'Play(PnP)模式,进一步提升性能。
# 升级到 Yarn 2+
yarn set version berry
# 启用 PnP
yarn config set nodeLinker pnp
# 生成 .pnp.cjs 文件
yarn install
包管理器对比
📊 全面对比分析
以下对比基于大型前端项目(约 1000+ 依赖)的实际测试结果
性能对比
特性 | npm | pnpm | yarn |
---|---|---|---|
安装速度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
磁盘空间 | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
依赖管理 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
Monorepo | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
生态成熟度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
命令对比
操作 | npm | pnpm | yarn |
---|---|---|---|
安装依赖 | npm install | pnpm install | yarn |
添加包 | npm install axios | pnpm add axios | yarn add axios |
开发依赖 | npm install -D vite | pnpm add -D vite | yarn add -D vite |
全局安装 | npm install -g pkg | pnpm add -g pkg | yarn global add pkg |
更新包 | npm update | pnpm update | yarn upgrade |
删除包 | npm uninstall axios | pnpm remove axios | yarn remove axios |
运行脚本 | npm run dev | pnpm run dev | yarn run dev |
执行命令 | npx eslint | pnpm exec eslint | yarn dlx eslint |
选择建议
使用 npm:
- ✅ 新手入门,学习曲线平缓
- ✅ 官方支持,生态最完善
- ✅ 小型项目,对性能要求不高
使用 pnpm:
- ✅ 大型项目,依赖众多
- ✅ Monorepo 架构
- ✅ 对磁盘空间和速度有要求
- ✅ 严格的依赖管理
使用 yarn:
- ✅ 需要离线安装功能
- ✅ 对安装速度有要求
- ✅ 使用 Yarn Workspaces
- ✅ 团队已有 Yarn 使用经验
最佳实践
1. 版本管理
# ✅ 使用精确版本(生产环境)
"dependencies": {
"react": "18.2.0"
}
# ✅ 使用 ^ 范围(开发环境)
"dependencies": {
"axios": "^1.6.0" // 允许小版本更新
}
# ❌ 避免使用 * 通配符
"dependencies": {
"lodash": "*" // 不推荐
}
2. 依赖分类
# ✅ 正确区分依赖类型
# 运行时需要 -> dependencies
npm install react vue axios
# 仅开发时需要 -> devDependencies
npm install -D eslint webpack typescript
3. 锁文件管理
# ✅ 提交 lock 文件到 Git
git add package-lock.json
# 或
git add pnpm-lock.yaml
# 或
git add yarn.lock
# ✅ CI/CD 使用 ci 命令(更快更安全)
npm ci # 严格按照 lock 文件安装
pnpm install --frozen-lockfile
yarn install --frozen-lockfile
4. 安全检查
# 定期检查安全漏洞
npm audit
pnpm audit
yarn audit
# 自动修复漏洞
npm audit fix
pnpm audit fix
yarn audit fix
# 更新过时的包
npm outdated
npm update
5. 脚本优化
{
"scripts": {
// ✅ 使用 pre/post 钩子
"prebuild": "npm run clean",
"build": "vite build",
"postbuild": "npm run copy-files",
// ✅ 组合多个命令(串行)
"deploy": "npm run build && npm run upload",
// ✅ 并行执行(使用 npm-run-all)
"dev": "npm-run-all --parallel dev:*",
"dev:client": "vite",
"dev:server": "nodemon server.js"
}
}
6. .npmrc 配置文件
项目根目录创建 .npmrc
:
# 镜像源
registry=https://registry.npmmirror.com
# 严格的 peer 依赖
legacy-peer-deps=false
# 保存精确版本
save-exact=true
# 自动安装 peer 依赖
auto-install-peers=true
# 引擎严格模式
engine-strict=true
7. .npmignore 文件
发布包时忽略不必要的文件:
# 源代码
src/
tests/
# 配置文件
.eslintrc.js
.prettierrc
tsconfig.json
# 构建工具
webpack.config.js
vite.config.js
# 文档
docs/
*.md
!README.md
# 其他
.DS_Store
.env
node_modules/
❓ 常见问题与解决方案
1. 依赖安装失败
# 清除缓存
npm cache clean --force
pnpm store prune
# 删除 node_modules 和 lock 文件重新安装
rm -rf node_modules package-lock.json
npm install
2. 版本冲突
# 查看依赖树
npm ls axios
# 安装指定版本
npm install [email protected] --save-exact
# 使用 resolutions 强制版本(yarn)
{
"resolutions": {
"axios": "1.6.0"
}
}
# 使用 overrides 强制版本(npm 8.3+)
{
"overrides": {
"axios": "1.6.0"
}
}
3. 幽灵依赖(Phantom Dependencies)
# 问题:访问了未声明的依赖
import _ from 'lodash' // package.json 中未声明
# ✅ 解决方案 1:显式声明
npm install lodash
# ✅ 解决方案 2:使用 pnpm(自动阻止访问未声明依赖)
pnpm install
4. 全局包管理
# 查看全局包安装位置
npm root -g
pnpm root -g
# 更新全局包
npm update -g
pnpm update -g
# 列出过时的全局包
npm outdated -g
5. node_modules 体积过大
# ✅ 使用 pnpm(硬链接,节省空间)
pnpm install
# ✅ 清理未使用的包
npm prune
pnpm prune
# ✅ 分析包体积
npm install -g bundle-phobia-cli
bundle-phobia axios
# ✅ 使用 .npmignore 减少发布体积
6. 切换包管理器
# npm -> pnpm
pnpm import # 从 package-lock.json 生成 pnpm-lock.yaml
rm -rf node_modules package-lock.json
pnpm install
# npm -> yarn
yarn import # 从 package-lock.json 生成 yarn.lock
rm -rf node_modules package-lock.json
yarn install
# 删除旧的 lock 文件
rm package-lock.json
⚠️ 切换包管理器注意事项
切换包管理器时需要:
- 删除
node_modules
目录 - 删除旧的 lock 文件(package-lock.json / yarn.lock / pnpm-lock.yaml)
- 使用新的包管理器重新安装依赖
- 将新的 lock 文件提交到 Git
- 通知团队成员同步切换
7. npm ERR! code EACCES(权限错误)
问题: 在 Mac/Linux 上全局安装包时出现权限错误。
# ❌ 不推荐:使用 sudo
sudo npm install -g typescript # 可能导致权限问题
# ✅ 推荐方案 1:修改 npm 全局目录权限
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
# 将以下内容添加到 ~/.profile 或 ~/.zshrc
export PATH=~/.npm-global/bin:$PATH
source ~/.profile
# ✅ 推荐方案 2:使用 nvm 管理 Node.js
# nvm 安装的 Node.js 不需要 sudo 权限
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install node
8. npm WARN deprecated(包已弃用)
问题: 安装时提示某些包已被弃用。
# 查看弃用警告
npm install
# npm WARN deprecated [email protected]: request has been deprecated
# 解决方案:
# 1. 检查是哪个包依赖了弃用的包
npm ls request
# 2. 更新依赖或寻找替代方案
npm update # 尝试更新
# 或查找该包的替代品(如 request -> axios/node-fetch)
# 3. 如果是项目直接依赖,手动替换
npm uninstall request
npm install axios
9. peer dependencies 警告
问题: 安装时出现 peer dependencies 警告。
# npm WARN [email protected] requires a peer of react@^18.2.0 but none is installed
# 解决方案:安装缺失的 peer dependency
npm install react@^18.2.0
# 或使用 --legacy-peer-deps 忽略(不推荐)
npm install --legacy-peer-deps
💡 Peer Dependencies 说明
Peer dependencies 表示"同级依赖",通常用于插件或库,要求使用者的项目中已安装特定版本的依赖。例如 React 插件要求项目中已安装 React。
10. package.json 和 package-lock.json 冲突
问题: pull 代码后出现 package.json 和 package-lock.json 版本不一致。
# 症状:
# npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1
# 解决方案:
# 1. 保留 package.json,重新生成 lock 文件
rm -rf node_modules package-lock.json
npm install
# 2. 或者使用 npm ci(推荐)
npm ci # 严格按照 lock 文件安装,如果不一致会报错
# 3. 团队统一 npm 版本
npm install -g npm@latest
实用工具
npm-check-updates
检查并更新 package.json 中的依赖版本。
# 安装
npm install -g npm-check-updates
# 查看可更新的包
ncu
# 更新 package.json
ncu -u
# 然后重新安装
npm install
depcheck
检测未使用的依赖。
# 安装
npm install -g depcheck
# 检测未使用的依赖
depcheck
# 输出示例:
# Unused dependencies
# * lodash
# * moment
npm-run-all
并行或串行运行多个 npm 脚本。
# 安装
npm install -D npm-run-all
# 使用
{
"scripts": {
"clean": "rimraf dist",
"build:js": "webpack",
"build:css": "postcss",
"build": "npm-run-all clean --parallel build:*"
}
}
📋 快速参考表
npm、pnpm、yarn 命令速查
操作 | npm | pnpm | yarn |
---|---|---|---|
初始化项目 | npm init | pnpm init | yarn init |
安装所有依赖 | npm install | pnpm install | yarn |
添加生产依赖 | npm i axios | pnpm add axios | yarn add axios |
添加开发依赖 | npm i -D vite | pnpm add -D vite | yarn add -D vite |
全局安装 | npm i -g pkg | pnpm add -g pkg | yarn global add pkg |
更新包 | npm update | pnpm update | yarn upgrade |
删除包 | npm uninstall pkg | pnpm remove pkg | yarn remove pkg |
运行脚本 | npm run dev | pnpm dev | yarn dev |
执行命令 | npx eslint | pnpm exec eslint | yarn dlx eslint |
查看依赖 | npm ls | pnpm ls | yarn list |
清除缓存 | npm cache clean | pnpm store prune | yarn cache clean |
CI 安装 | npm ci | pnpm i --frozen | yarn --frozen |
版本号符号速查
符号 | 含义 | 示例 | 允许更新范围 |
---|---|---|---|
^ | 兼容主版本 | ^1.2.3 | 1.2.3 ~ 1.x.x |
~ | 兼容次版本 | ~1.2.3 | 1.2.3 ~ 1.2.x |
> | 大于 | >1.2.3 | 大于 1.2.3 |
>= | 大于等于 | >=1.2.3 | 大于等于 1.2.3 |
< | 小于 | <1.2.3 | 小于 1.2.3 |
<= | 小于等于 | <=1.2.3 | 小于等于 1.2.3 |
- | 范围 | 1.2.3 - 2.3.4 | 1.2.3 ~ 2.3.4 |
` | ` | 或 | |
无 | 精确版本 | 1.2.3 | 仅 1.2.3 |
📚 参考资源
官方文档
- npm 官方文档 - npm 完整文档
- pnpm 官方文档 - pnpm 中文文档
- Yarn 官方文档 - Yarn 官方文档
- package.json 字段说明 - 详细字段解释
规范与标准
- 语义化版本规范 - SemVer 2.0.0
- npm scripts 最佳实践 - 脚本编写指南
- Node.js 最佳实践 - 社区最佳实践
工具与资源
- npm trends - 包下载趋势对比
- npms.io - 包质量评分
- Bundlephobia - 包体积分析
- Can I use - 浏览器兼容性查询
💡 总结
包管理器是现代前端开发的基础工具,掌握它们能够:
- 📦 高效管理项目依赖
- 🚀 提升开发和构建速度
- 🔒 确保项目安全和稳定
- 🎯 优化团队协作流程
核心要点:
- 选择合适的包管理器:根据项目需求选择 npm、pnpm 或 yarn
- 规范依赖管理:正确区分生产依赖和开发依赖
- 版本控制:提交 lock 文件,使用语义化版本
- 安全第一:定期运行
npm audit
检查漏洞 - 性能优化:使用缓存、镜像源和合适的工具
希望本指南能帮助你熟练掌握 npm 及相关包管理工具!