慣性聚合 高效追讀感興趣之博客、新聞、科技資訊
閱原文 以慣性聚合開啟

推薦訂閱源

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

阮一峰的网络日志

無文章

打包工具Rollup.js入门教程
阮一峰 · 2022-05-05 · via 阮一峰的网络日志

rollup.js者,JavaScript 之打包器也。是文所述,其用法之基也。

一、简略

打包器之用,合众 JavaScript 脚本为一,以供浏览器之用。

浏览器需脚本打包,其故有三。

(1)昔时浏览器不支模块,大者必先合为单脚本而后行。

(2)Node.js 之模块,与浏览器不谐,必藉打包器以协之。

(3)浏览器载一大脚本,较载众小脚本,性能更优。

今时,最常用者,莫过于 Webpack。其能虽宏,然学之难,用之艰,人皆非之。

rollup.js 之作,本意在于创制一 ES 模块打包之器,简易直用,无需配置。此志,彼实已偿。

其后渐次演进,亦能打包 CommonJS 模块。然此际,须经繁复之配置,实则较 Webpack,简易未几。

是故,当仅以 rollup.js 装束 ES 模块,方得尽其所长。下文可见,此乃何等简易之事。

若尔项目用 CommonJS 模块,不荐 rollup.js,其利甚微。

倘尔未谙 ES 模块与 CommonJS 模块之异同,详参 ES6 教程

其二、安装

本文所取,乃全局安装 rollup.js。


$ npm install --global rollup

然,子若不欲安装,亦可直用,惟需将下文诸令中rollup,易为npx rollup(参看《npx 使用教程》)。

初试之,可运行下令,察其助。


$ rollup --help
# 或者
$ npx rollup --help

其三、示例

今以 rollup.js,包二简脚本:库文 add.js,及入口 main.js。


// add.js
const PI = 3.14;
const E = 2.718;

export function addPi(x) {
  return x + PI;
}

export function addE(x) {
  return x + E; 
}

前文之码中,模块 add.js,输出二工函数addPi()addE()


// main.js
import { addPi } from './add.js';

console.log(addPi(10));

之码中,主脚本 main.js 载 add.js 之工函数addPi()

继而,以 rollup.js 打包之。


$ rollup main.js

打包时,但示主脚本 main.js,rollup 自能将依项打包之。

打包之果,默认输出于屏。


const PI = 3.14;

function addPi(x) {
  return x + PI;
}

console.log(addPi(10));

可见,importexport之句已无,为原码所易。

复有,函数addE()未打包之,盖未用也。此性谓摇树(tree-shaking),即打包时自能去未用之码。

由前二点,rollup 输之码甚洁,且体小于他打包之器。

,以--file [FILENAME],存打包之果于所定之文。


$ rollup main.js --file bundle.js

,此令存打包之果于bundle.js。

,四、用之当察

(一)若有诸入口之文,则次第书其名,以--dir,定输出之域。


$ rollup m1.js m2.js --dir dist

,此令于dist,打包为众文:m1.js、m2.js,及其共依(若有)。

(二)--format iife,则置打包之果于一自执行之函数中。


$ rollup main.js --format iife

(三)欲使打包后之文极简,则用--compact


$ rollup main.js --compact

又有他法,可藉专器为之。


$ rollup main.js | uglifyjs --output bundle.js

前令分两途:初以 rollup 装束,次以 uglifyjs 精约,终书于 bundle.js。

(4)rollup 之用,得依配置之文(rollup.config.js),悉陈其要于中,下举一例。


// rollup.config.js
export default {
  input: 'main.js',
  output: {
    file: 'bundle.js',
    format: 'es'
  }
};

参数-c启配置之文。


$ rollup -c

吾不荐此,盖增繁复之故。常境之下,令行参数已足,且易览也。

五、化 CommonJS 模块

终,rollup 尚能化 ES 模块为 CommonJS 模块,用其参数--format cjs则可矣。


$ rollup add.js --format cjs

所化之CommonJS模块,其码如下。


'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

const PI = 3.14;
const E = 2.718;

function addPi(x) {
  return x + PI;
}

function addE(x) {
  return x + E; 
}

exports.addE = addE;
exports.addPi = addPi;

(终)