之前在准备校招面试的时候,已经深入研究了一部分前端工具链知识,其中就包括包管理器,也写了一些当时对pnpm的基本认识。现在,在积累了一些工作时长后,我打算结合我最新的一些开发经验,再谈谈我视角里的pnpm,对这篇博客进行「重写」。
为什么在deno/bun等新的包管理策略出现后,pnpm仍是最好的包管理器:
- 通过链接+嵌套的设计思路,彻底解决两大核心问题——幽灵依赖和重复拷贝,bun和deno都没有解决
- 通过软硬链接的方式解决node_modules体积过大的问题
- 通过嵌套目录的方式解决了幽灵依赖的问题,项目无法访问间接依赖
- 绝佳的兼容性,目前没有遇到任何相对npm不兼容的情况,相比之下新策略如bun、deno和yarn-pnp都有一些兼容性问题
- 原生workspace和monorepo支持
当然,pnpm在新技术的竞争下也暴露出了一些问题:
- 性能稍逊色,所谓bun采用了「超快的系统调用」
- deno2带来了js本地开发的新范式,deno2的向下兼容实现也类似pnpm