npm 即将被 Node.js 抛弃,快速了解和使用 yarn 和 pnpm 吧

4,421 阅读3分钟

前言

  • 学习时长:约 15 分钟
  • 环境准备:Node >= v16.9
  • 写作时间:2022-01-06,转载请注明

官方旧闻(2020年9月)

根据 Node.js 官方关于 Corepack 的 Envisioned workflow 章节

The full npm package wouldn't be included out of the box anymore

翻译:npm 包管理器以后不会默认为开箱即用了

预计在 v17 就实行。地位上升的是 pnpmyarn ,终于成为一等公民了,即使不深究原理和优劣,但是大家都说好的东西,也应该赶紧学习下基本概念和怎么用,幸好,这个只需要大概 15 分钟。

借用下 yarn 作者转的这个 twitter ,npm 成为阿斗难道是因为专利🐶?

Zoltan Kochan tweet.png

初体验

体验摘抄自 废宅阿斗 NPM 即将被 Node.js 官方抛弃 → Corepack

先安装 Node.16.9.0 版本,然后在 package.json 中声明对应的包管理工具:

// package.json
{
  "name": "corepack-test",
  "packageManager": "yarn@2.0.0"
}

玩起来:

# 单应用激活
$ corepack enable

# 用声明的包管理器,会自动下载对应的 yarn,然后再执行
$ yarn install

# 用非声明的包管理器,会自动拦截报错
$ pnpm install
Usage Error: This project is configured to use yarn

升级使用命令:

corepack prepare pnpm@6.24.4 --activate

💡提示: 不支持 pnpm@latest ,必须用 semver ,可以去 npm register 查询对应的 semver 。package.json 同理。

💡提示: 如果项目 package.json 指定了 packageManager ,全局也安装了,那么总是用项目指定的版本号。

npm 常用命令

npm 是 Node 默认的包管理器(package manager),截止本文写作时,其版本是 8.3.0,因此读到一些老的热门文章请,要注意其中提到的 npm 的版本号,很多分析可能对于 npm8 早已过时,如 yarn 的几大优点已被 npm 借鉴过去了。

npm 常用命令 再不学就来不及了,其他包管理命令行大同小异。以下是常用的一些 npm 命令:

$ npm -v # 显示版本
$ npm install express # 安装express模块,-g 参数全局安装
$ npm list # 列出(当前目录)已安装模块,-g 列出全局目录已安装
$ npm show express # 显示模块详情
$ npm update # 升级当前目录下的项目的所有模块
$ npm update express # 升级当前目录下的项目的指定模块
$ npm update -g express # 升级全局安装的express模块
$ npm uninstall express # 删除指定的模块

pNpM

1. 安装与升级

如上通过 corepack enable 即可激活安装。通过 corepack prepare pnpm@6.24.4 --activate 即可升级到指定版本。

2. 特点

作者是 Zoltan Kochan,一句话定位:

Fast, disk space efficient package manager

速度快、节省磁盘空间的软件包管理器

其中 p 据说是 Performant(性能好的)的意思。Node v16.13Corepack 自带了,官网亮点介绍:

  1. 快速:同类工具速度的将近 2 倍
  2. 高效:node_modules 中的所有文件均链接自单一存储位置
  3. 支持单体仓库:内置支持 monorepos

pnpm 通过 hard link 机制提升性能。神三元 关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npm/yarn? 有原理和性能的详细解析。

3. 快速学习 —— 命令行对照表

以下是一个与 npm 等价命令的对照表,帮助你快速入门:

npm 命令pnpm命令说明
npm installpnpm install别名: i
npm i <pkg>pnpm add <pkg>--save-prod, -P --save-dev, -D --save-optional, -O
npm uninstallpnpm remove别名: rm、uninstall、un

yarn

1. 安装与升级

如上通过 corepack enable 即可激活安装。通过 corepack prepare yarn@1.22.17 --activate 即可升级到指定版本。升级到 berry 版:corepack prepare yarn@2.4.3 --activate

2. 特点

yarn 是 Facebook 发布的,Github40.3k Star。曾经相对 npm < 5 具有安装速度快;安装过程信息很干净,对于错误提示更友好;yarn.lock 等优势,但是目前已经没有了。 可以认为已经基本趋同了,目前也是活跃被使用的。

3. 快速学习 —— 命令行对照表

以下是一个与 npm 等价命令的对照表,帮助你快速入门:

npm 命令pnpm命令说明
npm installyarn installyarn 里 install 可省略,直接 yarn
npm i <pkg>yarn add <pkg>默认 -S,其他的有:--dev/-D--optional/-O
npm uninstall <pkg>yarn remove <pkg>

cnpm

cnpmcCompany 的首字母。是搭建公司内部 npm registry 的工具。

Private npm registry and web for Company

cnpm 可以作为命令行工具安装,也可以设置一个 别名,可见本质上就是一个指向 https://registry.npmmirror.com 的 npm registry 镜像,每隔一定时间(同步频率目前为 10分钟 一次以保证尽量与官方服务同步)从 registry.npmjs.com 同步。同时采用了和 npm 不一样的缓存目录和用户配置目录,避免与 npm 冲突而已。

💡提示: 由于 cnpm 和 npm 在一个项目混合使用有坑,建议不要混用。本人直接使用 npm 搭配国内源,未使用 cnpm 命令行。

参考文档