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

官方兼容说明 (opens new window)

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

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

官方兼容说明 (opens new window)

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

# Corepack

官方文档 (opens new window)

中文文档 (opens new window)

# 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