包管理工具npm和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严格按照package.json中的依赖来执行,不会出现这样的问题。
怎么进行检查使用的包都是已经声明过的?
可以使用dependence-check工具
pnpm别名功能:使用场景
-
对现有包打补丁
-
安装不同版本的包使用别名进行依赖
-
结合包管理器的hooks
pnpm经常搭配monorepo项目一起使用
网友评论