rollup學(xué)習(xí)--01. 基礎(chǔ)學(xué)習(xí)

前言

最近學(xué)習(xí)了rollup的相關(guān)知識(shí)蝙斜。對(duì)自己來(lái)說(shuō)也算是一種知識(shí)儲(chǔ)備。這篇主要記錄我對(duì)rollup學(xué)習(xí)的一些理解與筆記。

rollup簡(jiǎn)單概述

我對(duì)于rollup的理解诀紊,rollup是一款小巧的javaScript模塊打包器。并且rollup是一款ESM打包器隅俘。它基于ES模塊化規(guī)范邻奠。具體可以參考官網(wǎng)鏈接上的概述(有能力看英文文檔的還是看英文文檔,中文文檔有些地方可能不全为居,這里也貼出中文文檔鏈接:傳送門)碌宴。

關(guān)于rollup的特性其實(shí)上面的總結(jié)已經(jīng)說(shuō)的差不多了,這里簡(jiǎn)單羅列一下

  • 小巧蒙畴,簡(jiǎn)單 (從文檔體積就可以看出來(lái))

  • 基于ES模塊化規(guī)范 (意味為其他模塊化規(guī)范如CommonJS就需要用插件來(lái)支持)

  • rollup中不支持HMR(熱替換)贰镣,因?yàn)槟K最終被打包到一個(gè)函數(shù)中

  • 自帶tree sharking

  • 輸出結(jié)果更加扁平,執(zhí)行效率更高,并且打包結(jié)果依舊可讀

快速開始一個(gè)demo

安裝rollup

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

安裝完成后碑隆,在node_modules/.bin中就會(huì)有rollup文件董朝,執(zhí)行yarn rollup就會(huì)執(zhí)行打包命令啦。

文件目錄

demo的文件目錄結(jié)構(gòu)如下所示

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的配置文件干跛,一個(gè)簡(jiǎn)單的配置主要包含

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 -- 一個(gè)自動(dòng)執(zhí)行的功能阐肤,適合作為 <script>標(biāo)簽這樣的凫佛。

  • umd -- 通用模塊定義,以amd, cjs, 和 iife 為一體

  • name :當(dāng)format為iife和umd時(shí)必須提供孕惜,將作為全局變量掛在window(瀏覽器環(huán)境)下:window.A=...

  • sourcemap : 生成bundle.map.js文件愧薛,方便調(diào)試

  • external : 不要對(duì)"XXX"文件進(jìn)行打包,而是作為外部依賴

  • plugins : 一些插件

  • global : 告訴rollup 全局變量$即是jquery

多路徑打包:

只需要將配置變?yōu)橐粋€(gè)數(shù)組形式

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'
      }
    ]
  }
];

常用命令行參數(shù)

-i, --input <filename>      要打包的文件(必須)
-o, --file <output>         輸出的文件 (如果沒(méi)有這個(gè)參數(shù)衫画,則直接輸出到控制臺(tái))
-f, --format <format>       輸出的文件類型 (amd, cjs, esm, iife, umd)
-e, --external <ids>        將模塊ID的逗號(hào)分隔列表排除
-g, --globals <pairs>       以`module ID:Global` 鍵值對(duì)的形式毫炉,用逗號(hào)分隔開 
                              任何定義在這里模塊ID定義添加到外部依賴
-n, --name <name>           生成UMD模塊的名字
-h, --help                  輸出 help 信息
-m, --sourcemap             生成 sourcemap (`-m inline` for inline map)
-v, --version               打印版本號(hào),如果改動(dòng)重新打包
-w, --watch                 監(jiān)聽源文件是否改動(dòng)
--amd.id                    AMD模塊的ID削罩,默認(rèn)是個(gè)匿名函數(shù)
--amd.define                使用Function來(lái)代替`define`
--no-strict                 在生成的包中省略`"use strict";`
--no-conflict               對(duì)于UMD模塊來(lái)說(shuō)瞄勾,給全局變量生成一個(gè)無(wú)沖突的方法
--intro                     在打包好的文件的塊的內(nèi)部(wrapper內(nèi)部)的最頂部插入一段內(nèi)容
--outro                     在打包好的文件的塊的內(nèi)部(wrapper內(nèi)部)的最底部插入一段內(nèi)容
--banner                    在打包好的文件的塊的外部(wrapper外部)的最頂部插入一段內(nèi)容
--footer                    在打包好的文件的塊的外部(wrapper外部)的最底部插入一段內(nèi)容
--interop                   包含公共的模塊(這個(gè)選項(xiàng)是默認(rèn)添加的)
--silent                    不將警告打印到控制臺(tái)

javaScript API

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

  • rollup.rollup

該rollup.rollup函數(shù)接收一個(gè)輸入選項(xiàng)對(duì)象作為參數(shù)弥激,并返回一個(gè)解析為bundle具有各種屬性和方法的對(duì)象的 Promise进陡,在此步驟中,Rollup 將構(gòu)建模塊圖并執(zhí)行 tree-shaking微服,但不會(huì)生成任何輸出趾疚。

在一個(gè)bundle對(duì)象上,您可以bundle.generate使用不同的輸出選項(xiàng)對(duì)象多次調(diào)用以在內(nèi)存中生成不同的包职辨。如果您想直接將它們寫入磁盤盗蟆,請(qǐng)bundle.write改用。

一旦你完成了bundle對(duì)象舒裤,你應(yīng)該調(diào)用bundle.close()喳资,它會(huì)讓插件通過(guò)closeBundle鉤子清理它們的外部進(jìn)程或服務(wù)。

  • rollup.watch

Rollup 也提供了 rollup.watch 函數(shù)腾供,當(dāng)它檢測(cè)到磁盤上單個(gè)模塊已經(jīng)改變仆邓,它會(huì)重新構(gòu)建你的文件束鲜滩。 當(dāng)你通過(guò)命令行運(yùn)行 Rollup,并帶上 --watch 標(biāo)記時(shí)节值,此函數(shù)會(huì)被內(nèi)部使用徙硅。

后記

下一篇是我學(xué)習(xí)rollup的插件的筆記,希望會(huì)對(duì)大家有所幫助搞疗。
下一篇:rollup學(xué)習(xí)--02.常用插件學(xué)習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嗓蘑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匿乃,更是在濱河造成了極大的恐慌桩皿,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幢炸,死亡現(xiàn)場(chǎng)離奇詭異泄隔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宛徊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門佛嬉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人闸天,你說(shuō)我怎么就攤上這事暖呕。” “怎么了号枕?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵缰揪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我葱淳,道長(zhǎng),這世上最難降的妖魔是什么抛姑? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任赞厕,我火速辦了婚禮,結(jié)果婚禮上定硝,老公的妹妹穿的比我還像新娘皿桑。我一直安慰自己,他們只是感情好蔬啡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布诲侮。 她就那樣靜靜地躺著,像睡著了一般箱蟆。 火紅的嫁衣襯著肌膚如雪沟绪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天空猜,我揣著相機(jī)與錄音绽慈,去河邊找鬼恨旱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛坝疼,可吹牛的內(nèi)容都是我干的搜贤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼钝凶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仪芒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耕陷,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掂名,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后啃炸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铆隘,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年南用,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膀钠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡裹虫,死狀恐怖肿嘲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情筑公,我是刑警寧澤雳窟,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站匣屡,受9級(jí)特大地震影響封救,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捣作,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一誉结、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧券躁,春花似錦惩坑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至慢哈,卻和暖如春蔓钟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岸军。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工奋刽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓦侮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓佣谐,卻偏偏與公主長(zhǎng)得像肚吏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狭魂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容