作者:京东科技 于振京

受众简介

  • 前端研发工程师
还在为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以上工具不做具体介绍,但以上包管理工具都有以下几个问题

  1. 安装包耗时较长,虽yarn做了下载优化和缓存,但与pnpm相比还是略逊一些
  2. 占用存储空间较大,当开发机或服务器前端工程较多时,工程越多冗余包就会越多
  3. 扁平化解决,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 installpnpm add <pkg>命令时,PNPM会主动应用硬链接、软链接的形式治理依赖包

npm与pnpm命令比照

pnpm官网:https://pnpm.io/zh/

npm命令pnpm等价命令
npm installpnpm 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