蓝戒博客

  • 首页
  • 研发说
  • 架构论
  • 效能录
  • AI谈
  • 随笔集
智构苍穹
融合 AI、架构与工程实践,沉淀方法论,构建可持续的技术价值。
  1. 首页
  2. 研发说
  3. 正文

下一代前端模块化打包利器rollup

2016年10月27日 6030点热度 0人点赞 0条评论

什么是Rollup.js?

最直接的解释就是,Rollup是前端模块化的一个打包工具,将模块文件根据命令或 者根据rollup.config.js配置文件将多个模块文件打包成一个文件,然后就可以通过 HTML的<script>标签去导入这一个结果文件即可,从而使代码最小化,并且Rollup会自动过滤掉那些没有被使用过的函数或变量。
你也可以认为Rollup是一个构建工具,可以和像Grunt和Gulp等一起配置使用。但是, 需要注意的一点是当你使用Grunt和Gulp来处理像打包JavaScript这样的任务时,这些 工具的底层还是使用了像Rollup,Browserify或Webpack这些东西。

Rollup解决什么问题?

殊不知在 webpack 1.X 版本是无法利用该特性来避免引入冗余模块代码的,导致打出来的 bundle 文件大小难免略有臃肿。今天则向大家介绍一个当红炸子鸡——Rollup.js,通过它可以让你的 bundle 最小化 ,有效减少文件请求大小——以至于连 vue 都迅速地转投它来打包模块。
什么是模块?为何要使用模块?

模块其实就相当于一个js文件,让单一功能或者一个完整的功能集中到一个地方,当使用的时候直接引入该模块即可,从而不需要关心该模块中的函数是如何实现的,只需要关心该模块实现怎样的功能。

Tree-shaking

在 Rollup 编译模块的过程中,通过 Tree-shacking 的方式来剔除各模块中最终未被引用到的方法,通过仅保留被调用到的代码块来缩减 bundle 的大小。

这种方法需要 ES2015 的解构赋值语法来配合,多亏了它,Rollup 才能有效地对模块内容进行可靠的静态分析。

如何使用Rollup处理并打包项目文件?

为了开始工作,我们需要一些用来处理的代码。这个教程里,我们将用一个小应用,可从 GitHub 获取。

目录结构如下:

learn-rollup/
├── src/
│ ├── scripts/
│ │ ├── modules/
│ │ │ ├── mod1.js
│ │ │ └── mod2.js
│ │ └── main.js
│ └── styles/
│ └── main.css
└── package.json

你可以在终端执行下面的命令下载这个应用:

# Move to the folder where you keep your dev projects.
cd /path/to/your/projects

# Clone the starter branch of the app from GitHub.
git clone -b step-0 --single-branch https://github.com/jlengstorf/learn-
rollup.git

# The files are downloaded to /path/to/your/projects/learn-rollup/

安装Rollup并且创建配置文件

第一步,执行下面的命令安装Rollup:

npm install --save-dev rollup

然后,在 learn-rollup 文件夹下新建 rollup.config.js 。在文件中添加如下内容。

export default {
entry: 'src/scripts/main.js',
dest: 'build/js/main.min.js',
format: 'iife',
sourceMap: 'inline',
};

说说每个配置项实际上做了什么:

entry — 希望Rollup处理的文件路径。大多数应用中,它将是入口文件,初始化所有
东西并启动应用。
dest — 编译完的文件需要被存放的路径。
format — Rollup支持多种输出格式。因为我们是要在浏览器中使用,需要使用立即执
行函数表达式(IIFE)[注1]
sourceMap — 调试时sourcemap是非常有用的。这个配置项会在生成文件中添加一个
sourcemap,让开发更方便。

第二步 执行cmd命令:
rollup -c
即可通过默认配置文件(rollup.config.js)所设置的信息来进行打包。
第三步 使用插件
Rollup 也支持使用插件,写到配置对象的 plugin 里即可,这里我们以 rollup-plugin-babel 为例:

import babel from 'rollup-plugin-babel';

export default {
entry: 'src/main.js',
format: 'cjs',
plugins: [ babel() ],
dest: 'rel/bundle.js'
};

比较不爽的是,babel 的预设不像 webpack 可以直接写在配置文件里,而还是得独立写个“src/.babelrc”(注意我们可以写在 src 下,而不是非得放在项目根目录下):

{
"presets": ["es2015-rollup"]
}

注意咱得确保安装了 rollup-plugin-babel 和 babel 预设 babel-preset-es2015-rollup:

npm i rollup-plugin-babel babel-preset-es2015-rollup

这时候就能配合 babel 一起把 ES6 的模块编译为 ES5 的 bundle 了。

Rollup 也支持直接在模块中来被调用执行,这样很方便跟 grunt/gulp 等工具进行协作。

Rollup 虽然利用 ES6 的特性帮咱节省了不少文件大小,但它并没有类似 webpack 的 -p 参数帮你压缩混淆文件。

因此即使是官方文档也推荐配合使用 UglifyJS 来进一步缩小 bundle 体积。

另外 webpack2 已经出来好几款 beta 版本了,同样也加上了对 Tree-shaking 的支持,相信 webpack2 出来后,Rollup 的热度会大大消减。

参考资料:

1.http://www.w3cplus.com/javascript/learn-rollup-js.html?t=1474412757476

2.http://web.jobbole.com/86230/

3.http://blog.csdn.net/gccll/article/details/52785754

标签: web技术 构建工具
最后更新:2025年9月13日

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

最新 热点 随机
最新 热点 随机
前端开发 TanStack 化:从“框架思维”到“能力组合”的工程演进 Docker 进阶(七):容器化体系设计总结与生产落地经验复盘 Docker 进阶(六):生产环境中的 Docker 安全、监控与日志体系 Docker 进阶(五):Docker + CI/CD —— 从代码提交到自动部署 Docker 进阶(四):使用 Docker Swarm 与 Kubernetes 实现容器编排 Docker 进阶(三):深入理解镜像层(Layer)与缓存机制
Workbox:可直接用于生产环境的 Service Worker 利器快速构建项目文档网站:主流文档站点工具选型与对比DiceBear:30+ 风格、完全可定制的开源头像生成解决方案ES2015 → ES2025:JavaScript 十年演进全景回顾与核心 API 总结ECMAScript 2025(ES16)深度解析20 个现代 JavaScript API 深度盘点
从设计到开发:探索ArcoDesign组件库与ArcoPro的最佳实践 架构师应该具备的专业素养:如何成为一名优秀的系统架构设计师 AI 大模型开发:如何实现数据向量化 是时候给 lodash 放个假了:4 个更轻更快的现代替代方案 百度分享自定义设置不同媒体分享不同内容的方法 create-react-app创建react项目踩坑总结
最近评论
渔夫 发布于 3 个月前(11月05日) 学到了,感谢博主分享
沙拉小王子 发布于 8 年前(11月30日) 适合vue入门者学习,赞一个
沙拉小王子 发布于 8 年前(11月30日) 适合vue入门者学习,赞一个
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8

COPYRIGHT © 2025 蓝戒博客_智构苍穹-专注于大前端领域技术生态. ALL RIGHTS RESERVED.

京ICP备12026697号-2