• Webpack VS Rollup


    前言

    webpack和Rollup是现在最流行的模块打包器,那么这两者有什么区别,各自的使用场景又有什么不同呢?

    特性

    webpack

    • webpack是一个模块打包器,它把所有的资源都视为一个模块,包括非JS和JSON资源,对于非JS和JSON等静态资源可以通过一些第三方loader或者自定义loader进行转换;
    • webpack通过自己实现的__webpack_require__(moduleId)方法手动实现加载模块,并对已加载的模块进行缓存,对于非ESM的第三方模块的加载也毫无问题;
    • 正如我上一篇博客讲到的那样,webpack对于模块的处理并不是平铺展开,而是把所有的模块维护到一个__webpack_modules__的数组中,并且通过自己实现的__webapck_require__方法去加载模块,所以打包出来的体积略大
    • 当webpack处理程序时,它会递归地构建一个依赖关系图
    • 可以将按需加载的模块进行分割,等到实际需要的时候再按需加载
    • 冗余代码较多

    Rollup

    • Rollup是一个基于ESM的模块打包器,可以将项目中的细小模块打包成整块代码,使得划分的模块可以更好的运行在浏览器环境或者是Nodejs环境,不过Rollup对于静态资源的整合处理没有Webpack强大
    • 由于是基于ES6,所以天然支持动态导入和tree-shaking,但是对于CommonJS模块需要借助插件rollup-plugin-commonjs解析成ES6代码后再处理
    • 可以将所有的小文件打到一个bundle里,所有的代码都在一个函数作用域中,代码平铺展开,不压缩混淆的情况下,代码可读性依然很好
    • 冗余代码少,执行快

    优缺点

    webpack

    优点

    • 模块化
    • 静态资源整合
    • 公共代码拆分
    • 异步加载
    • 支持热更新
    • 社区生态更繁荣

    缺点

    • 配置复杂
    • 冗余代码较多

    Rollup

    优点

    • 基于ES6,天然支持动态导入和tree-shaking
    • 文档精简,配置相对于webpack来说更简单
    • 冗余代码少,执行快

    使用场景

    总的来说webpack更偏向于应用程序开发,Rollup偏向应用于JS库;如果你的应用场景中只是js代码,希望做ES转换,模块解析,可以使用Rollup。如果你的场景中涉及到css、html,涉及到复杂的代码拆分合并,建议使用webpack。

    真实场景

    使用Rollup的开源库

    • Vue
    • Vuex
    • Vue-router
    • React

    使用webpack的开源项目

    • ElementUI

    结语

    Rollup仅仅是一款ESM打包器,没有其他功能,例如Rollup中并不支持类似HMR这种高级特性。Rollup并不是要与Webpack全面竞争,而是提供一个充分利用ESM各项特性的高效打包器。

  • 相关阅读:
    设计模式:模板模式和策略模式混合使用
    JAVA反射
    Flutter最新配置本地资源文件详解,报错看这篇文章就对了!
    Qt+树莓派4B 窗口半透明效果实现
    智慧空调插座:智控生活好伴侣,节能降耗好帮手
    服务器下载mmdetection
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    图的基本概念
    Googleplay近期大量开发者二次验证问题与解决思路
    使用深度2img预训练模型生成图像到图像--附源码
  • 原文地址:https://blog.csdn.net/guxin_duyin/article/details/126024060