蓝戒博客

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

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

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

最新 热点 随机
最新 热点 随机
《生化危机》女主手搓AI记忆系统,48小时狂揽7千星!AI的长期记忆终于有解了? 用一条自然语言指令,让AI自动完成了调研、写稿、配音、剪辑全流程 你以为 AI 配音还在拼“像不像”,结果有人已经把“整个语音工作室”开源了 Claude Opus 4.7 上线:编程能力炸裂式跃升,Anthropic 手握更强模型却故意不发布 Gemma 4发布4天即遭"完全越狱",开源AI的安全与自由之争 一个文件让AI写代码不再"翻车":45K星的Karpathy指南火了
Dan Koe:不想打工?用这套方法把兴趣变成收入GitHub 爆火 4 万星项目:MiroFish,到底是 AI 新神话,还是下一代预测引擎DeerFlow 2.0:字节跳动开源的超级智能体框架,让AI研究、编码、创作一气呵成!Claude Code 生态大爆发:这周 GitHub 热点,已经不是工具升级,而是工作方式重写我把 Codex CLI 装上了“外挂大脑”:oh-my-codex 到底有多猛?别再盲下大模型了:用 llmfit 一秒看懂你的电脑到底能跑谁
Vue 3.6「无虚拟 DOM」时代开启:深入解读 Vapor Mode 的革命性变革 春节档 AI 大模型盘点:国产与硅谷齐发,谁在重塑 2026 赛道? 全面理解js变量提升、作用域链 10款免费网站检测速度分析工具 AI 开始雇佣人类?RentAHuman 爆火背后:一场关于「AI 代理经济」的真实实验 JS 获取浏览器窗口大小全解
最近评论
渔夫 发布于 6 个月前(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