返回
评论
使用pnpm减少前端开发环境依赖磁盘占用
pnpm。使用pnpm代替npm可以减少大量的模块磁盘占用。这不就是黑洞毁灭者吗?
使用
首先安装
curl -f https://get.pnpm.io/v6.14.js | node - add --global pnpm
或者也可以通过npm进行全局安装
npm install -g pnpm
依赖安装
pnpm install
# 安装某个依赖
pnpm add <pkg>
# 运行
pnpm <cmd>
空间对比
使用npm
使用pnpm
效果显著。
为啥不用yarn
对比一下npm和yarn,Yarn 是为了弥补 npm 的一些缺陷而出现的。yarn的优点:
- 安装速度快。具备并行安装,npm按照队列执行每个pkg的安装,yarn是同步执行所有安装任务。
- 安装版本统一。安装会生成一个版本lock文件。
yarn和npm一样,具有扁平依赖树,而扁平依赖树具有的问题:
- 模块和模块之间可以访问,即使他们没有依赖关系
- 扁平依赖树算法复杂
- node_module内部的模块还会带有node_module
而pnpm并没有扁平依赖树。
在npm@3前,依赖如下:
node_modules
└─ foo
├─ index.js
├─ package.json
└─ node_modules
└─ bar
├─ index.js
└─ package.json
这样的结构会有这样的问题:
- 依赖足够深的话,会导致路径非常长,在windows下会有长路径问题。
- 当依赖各种依赖的时候,会让依赖进行多次复制拷贝。
在npm@3之后,依赖树进行扁平化:
node_modules
├─ foo
| ├─ index.js
| └─ package.json
└─ bar
├─ index.js
└─ package.json
pnpm解决了npm@2有的问题,但却不用npm@3的扁平依赖树。
pnpm引入
如果是本地的node_modules:
require('foo')
会引入node_modules/foo/index.js
,而如果是pnpm,则会引入node_modules/.registry.npmjs.org/foo/1.0.0/node_modules/foo/index.js
。