##roolup是什么:
Rollup是一个 JavaScript 模块打包器,它采用一个据称为tree shaking
的技术,Tree shaking,即是指消除JavaScript上下文中无用代码,或更精确地说,只保留有用的代码。利用es6模块能静态分析语法树的特性,只将需要的代码提取出来打包,能大大减小代码体积。
##为什么要用rollup:
- Rollup 可以打出更快更小的包,尽可能的压缩,减少文件大小
- 只导出有用的代码,去掉没用到的代码
- Rollup的语法比Webpack更加简单,文档教程比Webpack更加循序渐进
##同类型工具(预编译模块方案):
webpack、browserify
##怎么用:
1.创建package.json文件
package.json配置-项目模板
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
如果不使用模板可以使用npm init用来初始化生成一个新的package.json文件。它会向用户提问一系列问题,如果你觉得不用修改默认配置,一路回车就可以了。1
npm init
有了package.json文件,直接使用npm install命令,就会在当前目录中安装所需要的模块1
npm install
2.简单创建第一个文件束(bundle)
rollup是从entry文件出发,将依赖的文件进行提取、编译、把所有文件最终都打包成一个bundle.js
安装rollup1
npm install rollup --global # 或简写 `npm i rollup -g`
创建一个简单的项目rollup-demo;
1 | mkdir -p rollup-demo/src |
创建入口文件名为src/main.js,并写入:1
2
3
4
5// src/main.js
import foo from './foo.js';
export default function () {
console.log(foo);
}
然后,让我们创建 foo.js 文件模块,我们的入口文件会引入:1
2// src/foo.js
export default 'hello world!';
最后创建文件束并输出bundle.js,这样就可以完成简单的打包工作
format 设置打包模块所使用的规范,rollup 支持导出 AMD、CommonJS、ES2015、Global 及 UMD 五种规范的打包文件,可以通过rollup -f amd/cjs/es/iife/umd来切换导出模块所使用的规范。
rollup走的是ES2015模块语法,现在的浏览器对ES2015新特性支持不够完善,不过项目可以通过 babel ,Traceur将尚未得到支持的ES2015特性转换为ES5标准的代码,使其得到浏览器的支持,所有现在rollup最终编译出来的模块希望它能走commonjs语法。1
rollup src/main.js --format cjs --output bundle.js
3.使用配置文件创建bundle.js
在项目根目录创建一个名为 rollup.config.js 的文件, 同时添加下面的代码:1
2
3
4
5
6// rollup.config.js
export default {
entry: 'src/main.js',
format: 'cjs',
dest: 'dist/bundle.js' // 相当于 --output
};
为了使用配置文件,我们使用 –config or -c 标记:1
rollup -c
4.使用package.json文件创建bundle.js
一个 package.json 包含关于你项目的重要信息,包括它的名称、版本、许可证和依赖。(实际上,你不可以发布一个不包括 package.json 的程序包 - 但你仍然应该有一个这样的文件如果你构建的是一个应用而非一个库)。
打开 package.json 并找到(创建) scripts 部份, 添加 build 键值:1
2
3
4
5
6
7
8{
...,
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "rollup -c"
},
...
}
执行以下命令即可完成构建:1
npm run build
5.项目demo地址
https://github.com/jesonn/rollup-demo
##现有项目是否适合使用rollup:
rollup比较适合单页应用和类库的打包,将所有文件最终都打包成一个bundle.js。
工程模块依赖很简单,不需要把js或各种资源打包,只需要简单的合并、压缩,在页面中引用就好了。那就不需要使用rollup,Browserify、Webpack、这些打包工具,Gulp就够用了。
反过来,如果你的工程庞大,页面中使用了很多库(SPA很容易出现这种情况),那就可以选择某种模块化方案。至于是用rollup,还是Webpack就需要根据项目情况来使用。
以下是逐渐模块化的阶段
1-inline-script(内嵌javascript)
2-script-rags(外联javascript)
3-module-object ( IIFE(模块模式))
4-requirejs(requirejs是模块加载器,按需异步加载模块)
5-browserify( browserify是模块打包器)
6-webpack(模块打包器)
7-rollup(模块打包器)
我们项目处于2或者3阶段,项目依赖不强,不复杂,业务上暂时用不了像webpack,rollup这些打包工具,像我们内部做的有道云管理软件,也许可以用上。