探讨目前最火的pnpm -- 速度快、节省磁盘空间的node包管理器

pnpm是 Node.js 的替代包管理器。它是 npm 的直接替代品,但速度更快、效率更高。

参考链接:
pnpm中文网
pnpm中文文档

前言:

前段时间听大圣老师讲课 -- 【Vue3和React源码训练营】中 扩展了很多目前最新的前端技术
(视频请追寻学浪app --- 花果山大圣)有兴趣的同学可以去看看

大圣编程课堂 github

为什么效率更高?当你安装一个包时,我们将它保存在你机器上的一个全局存储中,然后我们从它创建一个硬链接而不是复制。对于模块的每个版本,磁盘上只保存一个副本。例如,当使用 npm 或 yarn 时,如果您有 100 个使用 lodash 的包,那么磁盘上将有 100 个 lodash 副本。Pnpm 可让您节省千兆字节的磁盘空间!

对比:
npm@2

包依赖项组合在一起,有可能无限深

node_modules
└─ foo
   ├─ index.js
   ├─ package.json
   └─ node_modules
      └─ bar
         ├─ index.js
         └─ package.json

这种方法有两个严重的问题:

  1. 包经常创建太深的依赖树,这会导致 Windows 上出现长目录路径问题
  2. 包在不同的依赖项中需要时被多次复制粘贴

npm@3

解决了这些问题,node-modules结构采用扁平化

node_modules
├─ foo
|  ├─ index.js
|  └─ package.json
└─ bar
   ├─ index.js
   └─ package.json

pnpm

使所有依赖项保持平坦,但采用硬链接使用符号链接将它们组合在一起

node_modules
├── foo -> ./.pnpm/foo@1.0.0/node_modules/foo
└── .pnpm
    ├── bar@1.0.0
    │   └── node_modules
    │       └── bar -> <store>/bar
    └── foo@1.0.0
        └── node_modules
            ├── foo -> <store>/foo
            └── bar -> ../../bar@1.0.0/node_modules/bar
  • 兼容性

以下列表列出了以往的 pnpm 版本和对应支持的 Node.js 版本

Node.js pnpm 4 pnpm 5 pnpm 6 pnpm 7
Node.js 10 ✔️ ✔️
Node.js 12 ✔️ ✔️ ✔️
Node.js 14 ✔️ ✔️ ✔️ ✔️
Node.js 16 ?️ ?️ ✔️ ✔️
Node.js 18 ?️ ?️ ✔️ ✔️
posted @ 2022-07-10 01:45  逍遥超儿  阅读(1191)  评论(0)    收藏  举报