rollup学习--01. 基础学习

前言

最近学习了rollup的相关知识。对自己来说也算是一种知识储备。这篇主要记录我对rollup学习的一些理解与笔记。

rollup简单概述

我对于rollup的理解,rollup是一款小巧的javaScript模块打包器。并且rollup是一款ESM打包器。它基于ES模块化规范。具体可以参考官网链接上的概述(有能力看英文文档的还是看英文文档,中文文档有些地方可能不全,这里也贴出中文文档链接:传送门)。

关于rollup的特性其实上面的总结已经说的差不多了,这里简单罗列一下

  • 小巧,简单 (从文档体积就可以看出来)

  • 基于ES模块化规范 (意味为其他模块化规范如CommonJS就需要用插件来支持)

  • rollup中不支持HMR(热替换),因为模块最终被打包到一个函数中

  • 自带tree sharking

  • 输出结果更加扁平,执行效率更高,并且打包结果依旧可读

快速开始一个demo

安装rollup

yarn add rollup --save--dev
// 或者
npm install rollup --save--dev
// 再或者
cnpm install rollup --save-dev

安装完成后,在node_modules/.bin中就会有rollup文件,执行yarn rollup就会执行打包命令啦。

文件目录

demo的文件目录结构如下所示

rollup_study_project
├─ .vscode
│  └─ settings.json
├─ dist 
│  └─ bundle.js # 打包生成文件
├─ package.json
├─ README.md
├─ rollup.config.js # rollup配置文件
├─ src
│  ├─ components # 组件文件夹
│  │  ├─ a.js
│  │  └─ b.js
│  ├─ index.html
│  └─ index.js # 入口文件
└─ yarn.lock

rollup.config.js是Rollup的配置文件,一个简单的配置主要包含

export default {
  input: 'src/main.js',
  output: {
    file: 'dist/bundle.js',
    format: 'cjs',
    name:'A', 
    sourcemap:true
  },
  external : ["XXX"],
  plugins : [],
  global : {
        'jquery' : '$'  
  }
};
  • input : 入口文件路径

  • output : 出口文件配置

  • file : 出口文件路径

  • format : 生成文件的格式, 主要有amd, cjs , es,life,umd

  • amd : 异步模块定义,用于像RequestJS这样的模块加载器。

  • cjs -- CommonJS, 适用于Node或Browserify/webpack

  • es -- 将软件包保存为ES模块文件。

  • iife -- 一个自动执行的功能,适合作为 <script>标签这样的。

  • umd -- 通用模块定义,以amd, cjs, 和 iife 为一体

  • name :当format为iife和umd时必须提供,将作为全局变量挂在window(浏览器环境)下:window.A=...

  • sourcemap : 生成bundle.map.js文件,方便调试

  • external : 不要对"XXX"文件进行打包,而是作为外部依赖

  • plugins : 一些插件

  • global : 告诉rollup 全局变量$即是jquery

多路径打包:

只需要将配置变为一个数组形式

export default [
  {
    input: 'main-a.js',
    output: {
      file: 'dist/bundle-a.js',
      format: 'cjs'
    }
  },
  {
    input: 'main-b.js',
    output: [
      {
        file: 'dist/bundle-b1.js',
        format: 'cjs'
      },
      {
        file: 'dist/bundle-b2.js',
        format: 'es'
      }
    ]
  }
];

常用命令行参数

-i, --input <filename>      要打包的文件(必须)
-o, --file <output>         输出的文件 (如果没有这个参数,则直接输出到控制台)
-f, --format <format>       输出的文件类型 (amd, cjs, esm, iife, umd)
-e, --external <ids>        将模块ID的逗号分隔列表排除
-g, --globals <pairs>       以`module ID:Global` 键值对的形式,用逗号分隔开 
                              任何定义在这里模块ID定义添加到外部依赖
-n, --name <name>           生成UMD模块的名字
-h, --help                  输出 help 信息
-m, --sourcemap             生成 sourcemap (`-m inline` for inline map)
-v, --version               打印版本号,如果改动重新打包
-w, --watch                 监听源文件是否改动
--amd.id                    AMD模块的ID,默认是个匿名函数
--amd.define                使用Function来代替`define`
--no-strict                 在生成的包中省略`"use strict";`
--no-conflict               对于UMD模块来说,给全局变量生成一个无冲突的方法
--intro                     在打包好的文件的块的内部(wrapper内部)的最顶部插入一段内容
--outro                     在打包好的文件的块的内部(wrapper内部)的最底部插入一段内容
--banner                    在打包好的文件的块的外部(wrapper外部)的最顶部插入一段内容
--footer                    在打包好的文件的块的外部(wrapper外部)的最底部插入一段内容
--interop                   包含公共的模块(这个选项是默认添加的)
--silent                    不将警告打印到控制台

javaScript API

rollup 提供了可从 Node.js 使用的 JavaScript API。

  • rollup.rollup

该rollup.rollup函数接收一个输入选项对象作为参数,并返回一个解析为bundle具有各种属性和方法的对象的 Promise,在此步骤中,Rollup 将构建模块图并执行 tree-shaking,但不会生成任何输出。

在一个bundle对象上,您可以bundle.generate使用不同的输出选项对象多次调用以在内存中生成不同的包。如果您想直接将它们写入磁盘,请bundle.write改用。

一旦你完成了bundle对象,你应该调用bundle.close(),它会让插件通过closeBundle钩子清理它们的外部进程或服务。

  • rollup.watch

Rollup 也提供了 rollup.watch 函数,当它检测到磁盘上单个模块已经改变,它会重新构建你的文件束。 当你通过命令行运行 Rollup,并带上 --watch 标记时,此函数会被内部使用。

后记

下一篇是我学习rollup的插件的笔记,希望会对大家有所帮助。
下一篇:rollup学习--02.常用插件学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容