关于包管理工具,npm,yarn ,cnpm

      前端:做了差不多一年的前端了,经常使用到npm这样的包管理工具,也听说过yarn这东西。在我的见识,只知道npm和yarn是个同样的工具,具体有什么区别没有深入了解过。。。今天在网上看前端文章的时候,看到了关于这方面的内容。就结合自己的经验,做一次总结。

      npm3以前的版本,被称为远古时代。那时候的安装策略并不是扁平化的。开发者安装一个模块,就会在node_modules找到对应的模块名称的文件夹,模块的所有依赖又会在其文件夹下。这样就会容易导致目录的层级特别高,而且对于windows的操作系统,最长的路径长度限制在248个字符之内。

     总结一个一下缺点:

  1.目录嵌套层级过深;

  2.模块是相互独立的,相同的模块实例无法共享。



    后来人们为了解决嵌套过深的问题,引入了软链接的方案。(把所有的包扁平化的安装在一个位置,然后通过软链接-windows 快捷方式的方式组合到 node_modules 中。)npminstall和pnpm就实现了这种方案。cnpm使用的就是npminstall

好处可以减少嵌套层级太深,而且可以达到模块共享,减少内存占有。但也有很明显的缺点:

1.一般情况都是通过第三方库来实现这功能,无法保证跟npm一样的行为;

2.无法和npm一起使用,要么使用npm或者是cnpm/pnpm,两者混用可能会造成奇怪的效果。



     npm3的时代,它不是通过软链接的形式来实现扁平化,而是直接把所有的模块安装在node_modules下。在对于不同版本的模块依赖时,(如:package-a依赖 [email protected] ,而package-b依赖 [email protected] )则会按照原来的嵌套方式解决。

这种方式很好的解决了之前的缺点,但唯一不足的就是安装速度还是相对慢。




yarm的时代:随着node应用到企业级项目,npm暴露出很多问题。

1.npm 无法保证两次安装的版本是完全相同的,因为它是通过语义化的版本来安装,可以限制你安装模块的版本号,但是你无法限制你安装模块依赖的模块的版本号;

2.安装速度真的是很慢,一旦一个项目依赖上千个包,那就要等半个钟。

yarm诞生就是为了解决这些问题:

1)引入 yarn.lock 文件来管理依赖版本问题,保证每次安装都是一致的;

2)缓存加并行下载保证了安装速度



npm5的时代,在yarn的带动下,npm官方开始进行了改进。

1)引用了package-lock.json,默认添加。作用和yarn.lock一样;

2)安装自动添加 dependencies,不需手动书写-S参数;

3)提升了安装速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章