蓝戒博客

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

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

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

最新 热点 随机
最新 热点 随机
Google、ChatGPT账号突然被封?别乱申诉!这套方法更容易获得重新审核 告别逐字蹦字!Google 扔下核弹级 DiffusionGemma:像印报纸一样“刷刷”生成文本,本地飙到1100字/秒! 别再无脑吹了!Claude Fable 5 刷屏背后,有些真相 Anthropic 根本没告诉你 笔记本变身超级AI!谷歌Gemma 4 12B彻底掀翻本地多模态的天花板 别再用AI洗稿了!学术圈疯传的“降维打击”神器:13个Agent帮你干翻垃圾论文评审 网页爬虫的终极“作弊码”:30项Bot检测全绿,CloakBrowser是如何把反爬系统按在地上摩擦的?
程序员省钱神技:用 9Router 薅尽全网 AI 羊毛,Token 暴省 40%18万星标霸榜!Anthropic黑客松冠军神作,彻底榨干Claude Code潜力的最强外脑ECC开源了!两个开源项目New-API + Sub2API,搭建你自己的 AI 模型聚合网关震惊开发圈!让AI告别“鱼的记忆”,这款开源神器AgentMemory彻底杀疯了!虾、马之后人类登场!GitHub飙升霸榜,OpenHuman让你零门槛拥有卡帕西同款私人超级AI!变天了!谷歌 I/O 2026 炸裂发布:Gemini 3.5 携两大杀器掀翻 AI 圈,你的电脑要被“接管”了?
LangChain:AI Agent 开发框架的全面解析 别再手动切 Python 版本了,pyenv优雅管理多版本 GPT-Image-2登顶那天,当了5个月"生图之王"的香蕉终于慌了 薅秃Anthropic羊毛?Claude Code企业级免费平替来了,生产线直接省下百万Token费! 55个AI专家帮你打工:Agency-Agents让OPC(一人公司)成为现实 js异步编程的解决方案全解析
最近评论
渔夫 发布于 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