111.包管理工具npm和pnpm区别

包管理工具npm和pnpm区别

npm vs pnpm

  • npm扁平化树,npm3解决了扁平化依赖树的问题,有引入了其他问题。扁平化处理node_modules下的包,相同路径下的包由于nodejs的机制,即使b的packages.json中没有依赖a,但是依旧能访问到a,会带来一些安全问题。拉平算法复杂。有些包不能被拉平。

  • 不会产生幽灵依赖问题

npm3之前,node_modules下面的包没有扁平化处理,不同的模块会有相同的依赖,占用内存空间,占用下载资源,慢

pnpm通过链接的方式来解决的。

怎么产生幽灵依赖的?为什么会产生幽灵依赖,原因是因为npm的扁平化处理结构+nodejs的特性,使得我们直接访问到node_modules下的包。

  • 我们本身的package.json中没有引入debug的包,但是我们引用了express,express依赖了这个包,然后express更新了,但是不是express本身进行更新了,它只是打了个patch,但是我们依旧引用的是旧的api就会报错。

  • express删除了引用debug,我们项目也会报引用错误。

关于幽灵依赖,网上百度的相关文章我还是没有很理解,直到看到这个视频,视频链接

pnpm怎么保证不会出现上述情况的?

pnpm严格按照package.json中的依赖来执行,不会出现这样的问题。

怎么进行检查使用的包都是已经声明过的?

可以使用dependence-check工具

pnpm别名功能:使用场景

  • 对现有包打补丁

  • 安装不同版本的包使用别名进行依赖

  • 结合包管理器的hooks

npm、yarn和pnpm特性对比参考

pnpm经常搭配monorepo项目一起使用

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容