网站首页 > 技术文章 正文
本文向大家介绍一个JavaScript包管理工具:pnpm。
1.pnpm是什么
pnpm 是 Performant NPM 的缩写,是一个 JavaScript 包管理工具。 与npm和yarn类似,但主要侧重于节省磁盘空间、提高安装速度和node_modules的规范性。
2.pnpm 与 npm 相比的优点
1)高效存储
npm 和 pnpm 使用存储的方式有很大差异。
使用 npm时,相同依赖项的多个项目各自保留一个副本。 例如,如果您有 100 个本地项目使用名为 hoge 的 1 MB 包,则 hoge 将被复制 100 次,并将使用 100 MB 的计算机存储空间。
而pnpm会将这些依赖项集中在一个位置,每个项目都会创建一个到该位置的链接,从而节省磁盘空间。 如果你的本地环境中有 100 个项目使用名为 hoge 的 1 MB 包,则会创建 100 个存储在 pnpm 存储中的 hoge 链接,而 hoge 本身不会增加,从而来节省存储空间。
2)安装速度快
JavaScript 包管理工具分三步执行安装:
- Resolving:解析依赖:识别所有必需的依赖项并将其提取到存储中。
- Fetching:计算目录结构:node_modules目录结构是根据依赖关系计算出来的。
- Linking:链接依赖项:所有剩余的依赖项都会从存储中获取并硬链接到node_modules。
传统的包管理工具将所有待安装包放在一个串行的流程中。例如下面的例子,将安装三个软件包:hoge、fuga 和 piyo。 当hoge和fuga完成解析依赖关系时,hoge和fuga也不能进入下一个阶段,需要等piyo包解析完成。 换句话说,如果有一个包需要很长时间完成一个步骤,那么其他包就会处于等待状态。整体流程如下图:
pnpm 通过为每个安装包运行单独的流程来加快安装过程,如下图所示,以消除安装包之间的等待状态。
3.严格的node_modules
使用 npm 时,您可以访问项目的 package.json 中未列出的包。 例如,当您安装一个名为express的包时,会将相关包将被放置在node_modules文件夹中,如下所示。
$ cd node_modules
$ ls -1
accepts
array-flatten
content-disposition
content-type
cookie
cookie-signature
debug
depd
destroy
ee-first
encodeurl
escape-html
etag
express
finalhandler
forwarded
fresh
http-errors
inherits
ipaddr.js
media-typer
merge-descriptors
methods
mime
mime-db
mime-types
ms
negotiator
on-finished
parseurl
path-to-regexp
proxy-addr
qs
range-parser
send
serve-static
setprototypeof
statuses
type-is
unpipe
utils-merge
vary
而pnpm 只放置直接依赖包。 这可以防止您访问项目的 package.json 中未列出的包,从而防止不必要的依赖项导致的问题和错误。
4.对比
与npm和yarn相比,pnpm有以下功能差异。
功能 | pnpm | Yarn | npm |
ワークスペースのサポート | ?? | ?? | ?? |
分离的node_modules | ?? 默认 | ?? | ?? |
Peer自动安装 | ?? | ? | ?? |
Plug'n'Play | ?? | ?? | ? |
Zero-Installs | ? | ?? | ? |
补丁依赖 | ?? | ?? | ? |
Node.js版本管理 | ?? | ? | ? |
支持锁定文件 | ?? - pnpm-lock.yaml | ?? - yarn.lock | ?? - package-lock.json |
支持覆盖 | ?? | ?? - resolutions | ?? |
关联存储 | ?? | ? | ? |
执行包 | ?? - pnpm dlx | ?? - yarn dlx | ?? - npx |
缓存的副作用 | ?? | ? | ? |
许可证显示 | ?? - pnpm licenses list | ?? - 通过插件 | ? |
5.总结
与传统的包管理工具相比,pnpm 具有以下优点:
- 存储高效
- 包安装速度很快
- 轻松防止依赖引起的错误
如果您对 npm 积怨已久,可以尝试 pnpm。
但是,与npm和yarn相比,互联网上提供的信息较少,你将不得不自己处理一些问题。
猜你喜欢
- 2024-11-08 加班用了2天,结果同事30分钟就搞定了?你和别人的差距在哪里
- 2024-11-08 下载文件工具类 文件下载工具是什么
- 2024-11-08 SMTP发送邮件 smtp发送邮件过程
- 2024-11-08 NPM 使用介绍 npm .staging
- 2024-11-08 java servlet笔记:设置编码集、文件下载和两种服务器跳转
- 2024-11-08 还不懂 HTTP 协议的吗?一篇文章讲透
- 2024-11-08 Ajax请求时,请求类型,常用的几种 Content-Type json form-data xml
- 2024-11-08 Python教程:报表和日志精讲 python自动生成日报
- 2024-11-08 安全RCE之未授权访问分析 未授权的访问路径
- 2024-11-08 JMeter的这个功能,你了解么? jmeter详解
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-