Node的包管理与版本控制
鹿酒 2022/12/6 ShellNode
一篇文章说清楚 node 的包管理工具的版本兼容与使用须知
# 简短不看版
使用Node版本低于12的旧项目,建议用yarn;新项目建议使用pnpm。
# 概述
npm / yarn / pnpm 可以看作是给Node项目用的命令行版应用商店。
Corepack 是管理包管理工具版本的工具
# 对比
| Node | 特点 | 速度 |
|---|---|---|
| npm ❤️ | 版本可能不固定 node自带 | 树形的依赖 每层级都会下载一遍 慢 |
| npm >=3 | 版本可能不固定 node自带 | 先遍历树 然后平铺依赖 遍历到重复的部分会减少下载量 较慢 |
| yarn | yarn.lock 锁定版本 安全 | 异步安装 缓存包支持离线下载 稍快 |
| pnpm | 包只存一份,所有项目都能引用 | 越用越快 |
# 包版本管理与兼容性
各个包管理工具版本与Node版本兼容表
# npm
| Node | npm |
|---|---|
| 18 - 20 | 9.X |
| 16 - 17 | 8.X |
| 15 | 7.X |
| <14 | 6.X |
# 因为是node自带的 所以在切换node时候会切换
sudo n 14.0.1
1
2
2
用n命令切换node版本时会出现 npm不自动切换的问题。 处理方法:使用sudo n来安装对应版本的node
# yarn
Yarn v1 版本日志 (opens new window) 官方兼容说明 (opens new window)
兼容node版本:^4.8.0 || ^5.7.0 || ^6.2.2 || >=8.0.0
Yarn v2 版本日志 (opens new window) 官方兼容说明 (opens new window)
兼容node版本:>12.x
# pnpm
| Node | pnpm 5 | pnpm 6 | pnpm 7 | pnpm 8 |
|---|---|---|---|---|
| 12 | ✔️ | ✔️ | ❌ | ❌ |
| 14 | ✔️ | ✔️ | ✔️ | ❌ |
| 16 | 未知 | ✔️ | ✔️ | ✔️ |
| 18 | 未知 | ✔️ | ✔️ | ✔️ |
# 官方方法
pnpm dlx pnpm@X install
pnpm dlx pnpm@X run dev:all
# 使用 Corepack / npx 或其他工具切换
corepack prepare pnpm@<XX> --activate
1
2
3
4
5
2
3
4
5
# Corepack
# Node.js 版本 >= v16.13 时 先开启再切换
corepack enable
# 指定版本
corepack prepare pnpm@<version> --activate
# Node.js 版本 >= v16.17 才能使用以下命令
corepack prepare pnpm@latest --activate
1
2
3
4
5
6
7
2
3
4
5
6
7