包管理工具npm、yarn、pnpm、cnpm详解
1. 包管理工具
1.1 npm
# 安装
$ node 自带 npm
# 基本用法
npm install package # 安装包
npm install # 安装所有依赖
npm install -g package # 全局安装
npm uninstall package # 卸载包
npm update package # 更新包
npm run script # 运行脚本
# 特点
- Node.js 默认包管理器
- 依赖平铺结构
- 包安装慢
- 磁盘空间占用大
1.2 yarn
# 安装
npm install -g yarn
# 基本用法
yarn add package # 安装包
yarn # 安装所有依赖
yarn global add package # 全局安装
yarn remove package # 卸载包
yarn upgrade package # 更新包
yarn run script # 运行脚本
# 特点
- 并行安装,速度快
- 自动锁定版本
- 更好的缓存机制
- 更简洁的输出
1.3 pnpm
# 安装
npm install -g pnpm
# 基本用法
pnpm add package # 安装包
pnpm install # 安装所有依赖
pnpm add -g package # 全局安装
pnpm remove package # 卸载包
pnpm update package # 更新包
pnpm run script # 运行脚本
# 特点
- 硬链接共享依赖
- 节省磁盘空间
- 安装速度快
- 更严格的依赖管理
1.4 cnpm
# 安装
npm install -g cnpm --registry=https://registry.npmmirror.com
# 基本用法
cnpm install package # 安装包
cnpm install # 安装所有依赖
cnpm install -g package # 全局安装
cnpm uninstall package # 卸载包
cnpm update package # 更新包
cnpm run script # 运行脚本
# 特点
- 淘宝 NPM 镜像
- 国内访问快
- 同步官方版本
2. 包管理器的特点
NPM:
- Node.js 默认包管理器
- 最大的包生态系统
- 依赖处理较慢
- 占用空间大
Yarn:
- Facebook 开发
- 并行安装
- 离线模式
- 确定性安装
PNPM:
- 节省磁盘空间
- 快速安装
- 严格的依赖管理
- 支持 monorepo
CNPM:
- 淘宝镜像源
- 国内快速访问
- 实时同步官方源
3. 包管理器对比
# 锁文件对比
npm -> package-lock.json
yarn -> yarn.lock
pnpm -> pnpm-lock.yaml
cnpm -> 无锁文件
# 性能对比
安装速度: pnpm > yarn > cnpm > npm
磁盘空间: pnpm > yarn > npm > cnpm
可靠性: yarn ≈ pnpm > npm > cnpm
4. 浏览器包管理工具
<!-- Bower (已过时但仍被使用) -->
bower install jquery
<!-- jsDelivr CDN -->
<script src="https://cdn.jsdelivr.net/npm/jquery"></script>
<!-- unpkg -->
<script src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
5. 模块打包工具
# Webpack
npm install webpack webpack-cli --save-dev
# Rollup
npm install rollup --save-dev
# Vite
npm create vite@latest
# Parcel
npm install parcel --save-dev
6. 选择建议
新项目:
- 个人项目推荐 pnpm
- 团队项目遵循团队标准
大型项目:
- monorepo 推荐 pnpm
- 多包项目推荐 yarn workspaces
小型项目:
- npm 足够使用
- yarn 也是好选择
特殊情况:
- 国内项目可考虑 cnpm
- 老项目维持原有工具
7. 使用建议
7.1 项目初始化
- 使用 create-react-app, vue-cli 等脚手架
- 选择合适的包管理器
- 设置合适的 .gitignore
7.2 依赖管理
- 明确区分 dependencies 和 devDependencies
- 使用锁文件确保版本一致
- 定期更新依赖版本
7.3 性能优化
- 使用缓存机制
- 选择合适的镜像源
- 优化安装策略
7.4 安全考虑
- 定期进行安全更新
- 审查依赖包的安全性
- 使用 npm audit 等工具
注意:
- 团队统一很重要
- 保持依赖更新
- 注意安全问题
- 遵循最佳实践