Rollup 快速入門和配置文件
本文轉載自微信公眾號「勾勾的前端世界」,作者西嶺。轉載本文請聯系勾勾的前端世界公眾號。
概述(Overview)
Rollup 是一個 JavaScript 模塊打包器,可以將小塊代碼編譯成大塊復雜的代碼。Rollup 對代碼模塊使用新的 ES Module 標準,而不是以前的社區模塊化方案,如CommonJS 和 AMD。ES6 模塊已經被現代化瀏覽器原生實現,2020 年 Vue 作者發布了 Vite ,定義為下一代前端開發與構建工具,目的是取代依賴 Webpack 打包的各種構建工具,而 Vite 的模塊化工具使用的就是 Rollup。
快速入門
使用 npm install --global rollup 進行安裝, 運行 rollup --help 可以查看可用的選項和參數。
幫助信息中的提示: Usage: rollup [options]
- // ======= index.js ============
- import msg from'./message'
- import {names} from'./user'
- console.log(names())
- console.log(msg)
- console.log('Rollup Test Code')
- // ======== message.js ===========
- exportdefault {
- hi:'Hey '
- }
- // ======== user.js ===========
- exportconst names = () => {
- console.log('xiling')
- }
- exportconst ages = () => {
- console.log(666)
- }
命令行終端執行: rollup index.js
- $ rollup index.js
- index.js → stdout...
- var msg = {
- hi: 'Hey '
- };
- const names = () => {
- console.log('xiling');
- };
- console.log(names());
- console.log(msg);
- console.log('Rollup Test Code');
在命令終端中,我們能看到最終打包后的編譯代碼被打印出來了。我們需要的是將小塊的文件代碼打包到一個大的文件中。想要實現效果,只需要在命令中添加指定的命令參數即可: rollup index.js --file bundle.js,生成 bundle.js 文件,代碼如下:
- var msg = {
- hi:'Hey '
- };
- const names = () => {
- console.log('xiling');
- };
- console.log(names());
- console.log(msg);
- console.log('Rollup Test Code');
我們看到打包后的代碼非常簡潔,就是將需要運行的代碼按照順序拼裝到一起。注意,是只會保留用到的代碼。這就是Rollup 最早提出的 Tree-shaking 特性,后來幾乎被所有打包工具參考引入。
什么是 Tree-shaking 呢? 基本原理非常簡單,Rollup 在打包的過程中, 靜態分析代碼中的 import,只引入最基本最精簡代碼,并將排除任何未實際使用的代碼。所以可以生成輕量、快速,以及低復雜度的 library 和應用程序。
配置文件
我們一般在命令行中使用 Rollup。你也可以提供一份配置文件(可要可不要)來簡化命令行操作,同時還能啟用 Rollup 的高級特性。配置文件是一個ES6模塊,它對外暴露一個對象,這個對象包含了一些 Rollup 需要的選項。通常,我們把這個配置文件叫做rollup.config.js,它通常位于項目的根目錄。
注意:Rollup 本身會處理配置文件,所以可以使用 export default 語法——代碼不會經過 Babel 等類似工具編譯,所以只能使用所用Node.js 版本支持的 ES2015 語法。
配置選項列表:https://www.rollupjs.com/guide/big-list-of-options
- // rollup.config.js
- exportdefault {
- // 包的入口點 (例如:你的 main.js 或者 index.js)
- input:'index.js',
- // 出口配置
- output:{
- file:'budle.js',//打包到那個文件
- format:'esm'// 生成包的格式
- }
- }
輸入:input[string]: 'index.js' 這個包的入口點(例如:你的 main.js 或者 app.js 或者 index.js)
輸出:output[object]:{}
output.file[string]: 'bundle.js' 要寫入的文件。也可用于生成 sourcemaps,如果適用
output.format[string] :'iife' 生成包的格式。包格式選項可以是下面的任意一個:
amd – 異步模塊定義,用于像 RequireJS 這樣的模塊加載器
cjs – CommonJS,適用于 Node 和 Browserify/Webpack
esm – 將軟件包保存為 ES 模塊文件,在現代瀏覽器中可以通過