前言
- 学习时长:约 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 就实行。地位上升的是 pnpm
和 yarn
,终于成为一等公民了,即使不深究原理和优劣,但是大家都说好的东西,也应该赶紧学习下基本概念和怎么用,幸好,这个只需要大概 15 分钟。
借用下 yarn 作者转的这个 twitter ,npm 成为阿斗难道是因为专利🐶?
初体验
体验摘抄自 废宅阿斗 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.13
的 Corepack
自带了,官网亮点介绍:
- 快速:同类工具速度的将近 2 倍
- 高效:node_modules 中的所有文件均链接自单一存储位置
- 支持单体仓库:内置支持 monorepos
pnpm
通过 hard link
机制提升性能。神三元 关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npm/yarn? 有原理和性能的详细解析。
3. 快速学习 —— 命令行对照表
以下是一个与 npm 等价命令的对照表,帮助你快速入门:
npm 命令 | pnpm命令 | 说明 |
---|---|---|
npm install | pnpm install | 别名: i |
npm i <pkg> | pnpm add <pkg> | --save-prod, -P --save-dev, -D --save-optional, -O |
npm uninstall | pnpm 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 发布的,Github 有 40.3k Star。曾经相对 npm < 5
具有安装速度快;安装过程信息很干净,对于错误提示更友好;yarn.lock
等优势,但是目前已经没有了。
可以认为已经基本趋同了,目前也是活跃被使用的。
3. 快速学习 —— 命令行对照表
以下是一个与 npm 等价命令的对照表,帮助你快速入门:
npm 命令 | pnpm命令 | 说明 |
---|---|---|
npm install | yarn install | yarn 里 install 可省略,直接 yarn |
npm i <pkg> | yarn add <pkg> | 默认 -S ,其他的有:--dev/-D ,--optional/-O |
npm uninstall <pkg> | yarn remove <pkg> |
cnpm
cnpm
的 c
是 Company
的首字母。是搭建公司内部 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 命令行。
参考文档
- 2020-09-27 Maël Nison@Github Corepack design
- 2021-09-22 天猪 废宅阿斗 NPM 即将被 Node.js 官方抛弃 → Corepack
- 2021-08-29 zoomdong Pnpm: 最先进的包管理工具
- 2021-02-22 神三元 关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npm/yarn?