美文网首页
关于包管理工具,npm,yarn ,cnpm

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

作者: jie_YJ | 来源:发表于2018-08-16 23:36 被阅读0次

          前端:做了差不多一年的前端了,经常使用到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依赖 package-c@0.x.x ,而package-b依赖 package-c@1.x.x )则会按照原来的嵌套方式解决。

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


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

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

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

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

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

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


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

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

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

    3)提升了安装速度。

    相关文章

      网友评论

          本文标题:关于包管理工具,npm,yarn ,cnpm

          本文链接:https://www.haomeiwen.com/subject/knjabftx.html