作者:京东科技 于振京
受众简介
- 前端研发工程师
还在为
npm i
装置大量依赖等待时间较长,npm
扁平化node_modules
依赖版本抵触在苦恼吗,不必苦恼pnpm
为你保驾护航
- 次要影响:装置依赖包的过程,如果应用的是 npm install 会依据 package-lock.json 进行软件包的装置,如果没有 package-lock.json 会依据 package.json 进行生成并对装置的依赖包扁平化解决,装置依赖包的时长由两个因素导致:
1.package.json 依赖包的量
2. 网速
- 运维工程师
前端服务器因为部署工程较多,依赖包占用磁盘空间太大,不够用怎么办,还在花钱申请扩容吗,应用
pnpm
解决你的问题
次要影响:构建前端工程时 jenkin 工作个别会革除服务器的 node_modules 而后重新安装依赖,防止构建最新分支代码短少依赖,另外一台服务器可能会部署很多前端工程,这样就会存在不同工程中装置了雷同的依赖节约服务器磁盘空间
没用 pnpm 时
咱们应用以下几种工具治理依赖包
- npm:
nodejs
自带工具, 万物之主它的诞生给前端带来了春天 - npx:与
npm
同根同源,区别在于npm
将依赖装置在本地,而npx
防止了本地装置,间接对依赖包寻址执行 - nrm:
npm
的镜像源管理工具,应用它能够疾速切换npm
源 - cnpm:淘宝镜像包管理工具
- yarn:facebook 推出的包管理工具,曾风行一时
因为本章的配角是 pnpm 以上工具不做具体介绍,但以上包管理工具都有以下几个问题
- 安装包耗时较长,虽 yarn 做了下载优化和缓存,但与 pnpm 相比还是略逊一些
- 占用存储空间较大,当开发机或服务器前端工程较多时,工程越多冗余包就会越多
- 扁平化解决,npm v3 之后引入了扁平化机制,解决地区依赖问题,但又带来了以下几个问题
— 依赖构造的不确定性
— 扁平化算法自身复杂性很高,耗时较长
— 我的项目中依然能够非法拜访没有申明过依赖的包 (幽灵依赖
)
用了 pnpm 后
咱们会失去以下几个 buff
加持
- 疾速:官网解释:比其余包治理模块快 2 倍
- 高效:通过软硬链接寻址存储库,已达到节俭磁盘的目标
- 严格:
pnpm
默认创立了一个非平铺的node_modules
,因而防止了雷同插件不同版本援用不对称的问题,此设计完满解决了地区依赖
和幽灵依赖
意识软硬链接
对于 pnpm 为什么能达到【疾速】和【高效】,就须要意识下 软链接
和硬链接
了
- 硬链接
电脑文件系统中的多个文件共享一个文件存储单元
window: mklink /H aaa_hard.js aaa.js
macos: ln aaa.js aaa_hard.js
- 软链接
以相对或者相对路径的模式指向其余文件目录的援用
window: mklink aaa_soft.js aaa.js
macos: ln -s aaa.js aaa_soft.js
在执行 pnpm install
或pnpm add <pkg>
命令时,PNPM 会主动应用硬链接、软链接的形式治理依赖包
npm 与 pnpm 命令比照
pnpm 官网:https://pnpm.io/zh/
npm 命令 | pnpm 等价命令 |
---|---|
npm install | pnpm install |
npm install <pkg> | npm add <pkg> |
npm uninstall <pkg> | pnpm remove <pkg> |
npm run <cmd> | pnpm <cmd> |
收益
上图是同一个工程应用 npm 和 pnpm 所需工夫比拟,npm 耗时
179.612
秒而 pnpm 只须要27.3
秒