# rollup

rollup 是新一代的打包工具。相对于 webpack rollup 具有更好的可读性,首个应用 tree-shaking 的打包器。并且 rollup 使用 全新的 es module 标准编译代码模块,而不是使用 commonjs 等规范。

# 项目创建

rollup 配置和使用更为简单,生成代码更易读,因此更适合库和插件的开发。 首先创建配置文件:

npm init

然后增加一个入口文件 index.js。 安装 rollup

yarn add rollup -D

# 项目结构

|--index
|--rollup.config.js
|--package.json

# 基本配置

rollup 可以使用命令行参数,但更通常的做法是通过配置文件执行。

module.exports = {
    input: 'index.js',
    external: '',
    plugins: [],
    output: {
        file: 'dist/test.js',
        format: 'umd',
        name: 'Seed'
    }
}

# global

globals 的值是一个对象,key表示使用的模块名称(npm 模块名),value 表示在打包文件中引用的全局变量名。

globals: {
  vue: 'Vue'
}

# 命令行

//package.json
"script": {
    "build": "rollup -c"
}

# 插件

rollup 插件使用非常简单,只需要引入执行就可以了,根据不同插件的文档,传入不同的配置对象。


# rollup-plugin-node-resolve

使 rollup 可以解析 mode_modules 的文件。

# rollup-plugin-commonjs

使 rollup 可以解析 commonjs 规范的文件。

# rollup-plugin-json

plugins: [ plugin() ],

yarn add rollup-plugin-json -D
# rollup.config.js
import json from 'rollup-plugin-json';
plugins: [json()],

在文件中引入 json 就可以读取 json 数据了。

import { version } from './package.json';

console.log(version)

# rollup-plugin-serve

启动一个 server 服务

# rollup-plugin-generate-html-template

拷贝 html 并自动写入 js。

# rollup-plugin-generate-html-template

拷贝 html 并注入 js 脚本

# rollup-plugin-vue

使 rollup 可以解析 .vue文件。

# rollup-plugin-postcss

使 rollup 可以编译 css 并将内容写入到 style 标签。

# rollup-plugin-jsx

使 rollup 可以解析 .jsx 文件。

jsx({ factory: 'h' })

# rollup-plugin-buble

类似于 babel ,可以提前使用一些 es6 + 的js。

# 问题处理

# unresolved dependencies

通常是没有找到 mode_modules 下的外部依赖。解决方案:使用 'rollup-plugin-node-resolve'。 但是我遇到的并不是常规的问题,原因是 rollup-plugin-vue 的某些版本会报错,使用 rollup-plugin-vue@5.1.1 后解决。 https://github.com/vuejs/rollup-plugin-vue/issues/303

  • rollup-plugin-buble 将 es6 语法转化为 es5
  • rollup-plugin-flow-no-whitespace 去除flow静态类型检查代码
  • rollup-plugin-alias 为模块提供别名,比如 ·const He from 'he'` ,这里的 he 会替换为 alias 的实际名称。