蓝戒博客

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

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

2016年10月27日 6226点热度 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 中对话未来。

最新 热点 随机
最新 热点 随机
连加13小时班不喊累、自带300个分身?Kimi Work 开启“氛围办公”,到底谁在破防? Hermes 客户端来了:这不是聊天框,这是一个会长记性的 AI 打工人 薅秃Anthropic羊毛?Claude Code企业级免费平替来了,生产线直接省下百万Token费! 别再用VS Code插件了!GitHub狂割36K星的CodeWhale,才是终端党和DeepSeek的终极狂欢! 本地电脑能跑多大AI模型?2026本地大模型配置选型实践参考 Claude Opus 4.8 来了:这次 Anthropic 不卷嘴炮,开始卷“靠谱”了
字节把大模型装上了“手”!纯视觉接管键盘鼠标的 AI 终于来了别再为大模型 API 抓狂了!这款开源“全能型”代理神器 CCX,一站式搞定接口调度与可视化管理!程序员省钱神技:用 9Router 薅尽全网 AI 羊毛,Token 暴省 40%你的AI还在陪聊?2026超硬核多智能体(Agent)防坑与提效指南!18万星标霸榜!Anthropic黑客松冠军神作,彻底榨干Claude Code潜力的最强外脑ECC开源了!别再当Token冤大头了!3K行代码打造自我进化的极简Agent,真香!
Docker学习(一):入门教程从基础到实战篇 web实时通信应用解决方案:WebSocket模拟库-SockJS gRPC 通信协议详解与实战:高性能跨语言服务通信的基石 Vue 2 安全漏洞深度解析与修复:CVE-2024-9506 & CVE-2024-6783 【jquery】div当滚动到页面顶部的时候固定在顶部,离开可继续滚动 一文掌握 nrm:Mac 与 Windows 下的安装、使用与最佳实践
最近评论
渔夫 发布于 7 个月前(11月05日) 学到了,感谢博主分享
沙拉小王子 发布于 9 年前(11月30日) 适合vue入门者学习,赞一个
沙拉小王子 发布于 9 年前(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