rollup的五大核心配置

一、rollup.config.js基本配置

例如,以下是一份基本的 rollup.config.js 文件代码:

import babel from 'rollup-plugin-babel';
import commonjs from 'rollup-plugin-commonjs';
import resolve from 'rollup-plugin-node-resolve';export default {input: 'src/index.js', // 入口文件output: [{file: 'dist/bundle.js',format: 'cjs', // 输出格式},{file: 'dist/bundle.esm.js',format: 'esm', // 输出格式},],plugins: [resolve(), // 解析第三方依赖commonjs(), // 将 CommonJS 模块转换为 ES6babel(), // 转义 ES6/7 代码为 ES5],external: ['react', 'react-dom'], // 外部依赖mode: 'production', // 打包模式
};

其中,包括输入文件 input、输出文件 output、插件 plugins、外部依赖 external 和打包模式 mode。三个插件的配置:resolve 插件用于解析第三方依赖,commonjs 插件将 CommonJS 模块转换为 ES6,babel 插件将 ES6/7 代码转换为 ES5。

这个配置文件会将 src/index.js 文件作为入口文件,打包成两个输出文件 dist/bundle.jsdist/bundle.esm.js,其中 dist/bundle.js 的输出格式为 cjsdist/bundle.esm.js 的输出格式为 esm。在打包过程中,会先解析第三方依赖,将 CommonJS 模块转换为 ES6,最后将 ES6/7 代码转换为 ES5。在打包过程中,会忽略 reactreact-dom 两个外部依赖。打包模式为 production

二、五大核心配置

基础配置包括输入文件(input)、输出文件(output)、插件(plugins)、外部依赖(external)、打包模式(mode)等。

1. input打包入口文件

在使用 Rollup 进行打包时,需要配置 rollup.config.js 文件,其中 input 配置选项用于指定入口文件,告诉 Rollup 从哪个文件开始打包。具体来说,input 接收一个文件路径,可以是相对路径或绝对路径。

举个例子:

// rollup.config.jsexport default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'umd'}
}

以上配置中,input 指定了入口文件为 src/index.js,表示 Rollup 会从这个文件开始打包。

当我们运行 Rollup 命令后,它会找到入口文件,分析其中的依赖并生成打包后的文件。如果入口文件中包含其他模块的引用,Rollup 会递归地分析它们的依赖,最终将它们打包到生成的文件中。

使用 input 配置选项的好处在于,我们可以将多个模块的打包合并成一个文件,避免了在浏览器中加载多个文件的请求和响应时间。此外,Rollup 的静态分析能力可以将未使用的代码以及不必要的依赖移除,使得打包后的文件更小、更快。

综上所述,input 配置选项是非常重要的一个选项,它指定了入口文件,告诉 Rollup 从哪个文件开始打包,提高了打包的效率和性能。

2. output打包输出

rollup.config.js的output配置选项用于指定将代码打包后输出的路径和文件名等相关的配置。

以下是output配置选项的常见参数及其说明:

  • file:指定打包后输出的文件路径和名称。
  • format:指定打包后输出的代码格式,可以是amd、cjs、es、iife或umd。
  • name:指定打包后的全局变量名,仅当format为iife或umd时使用。
  • sourcemap:指定是否生成source map,默认值为false。
  • sourcemapFile:指定生成的source map文件位置,默认值为null。
  • sourcemapExcludeSources:指定是否将源文件包含在source map中,默认值为false。
  • banner:指定输出文件头部添加的注释信息。
  • footer:指定输出文件尾部添加的注释信息。
  • intro:指定输出文件头部添加的代码。
  • outro:指定输出文件尾部添加的代码。

以一个打包目录为例,假设我们有以下的目录结构:

.
├── dist
├── node_modules
├── src
│   ├── index.js
│   └── utils.js
└── rollup.config.js

我们可以将rollup.config.jsoutput配置选项设置为:

export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'umd',name: 'myLibrary',sourcemap: true,sourcemapFile: 'dist/bundle.js.map',sourcemapExcludeSources: true,banner: '/* myLibrary v1.0.0 */',footer: '/* https://github.com/my-username/my-library */',},
}

上述配置指定了将src/index.js作为入口文件打包为一个umd格式的文件,输出到dist/bundle.js文件中,并为打包后的代码指定了全局变量名为myLibrary。同时,打包后会生成一个sourcemap文件,并指定文件名为dist/bundle.js.map,生成的sourcemap会排除源文件,并在打包后的代码头部加上"/* myLibrary v1.0.0 /“注释,在打包后的代码尾部加上”/ https://github.com/my-username/my-library */"注释。

3. plugins插件

在使用 Rollup 进行打包时,可以通过在 rollup.config.js 文件中配置 plugins 来实现一些特定的操作,如代码压缩、处理 CSS 文件、支持 TypeScript 等。以下是 plugins 配置选项常用的插件及其功能:

  1. commonjs():将 CommonJS 模块转为 ES6 模块,使其能够被 Rollup 处理和打包。

  2. resolve():解析导入的依赖模块路径,以便 Rollup 能够正确找到依赖模块。

  3. babel():将 ES6+ 语法转为 ES5 语法,以便在低版本浏览器或者旧版 Node.js 上运行。

  4. terser():对代码进行压缩和混淆,以减小文件大小和提高网站性能。

  5. postcss():对 CSS 进行处理,如添加浏览器前缀、压缩等。

  6. typescript():支持使用 TypeScript 进行开发,并将 TypeScript 文件转为 JavaScript 文件。

下面以一个打包目录为例来说明如何在 rollup.config.js 中配置 plugins

import resolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
import babel from "@rollup/plugin-babel";
import { terser } from "rollup-plugin-terser";export default {input: "src/index.js",output: {file: "dist/bundle.min.js",format: "iife",},plugins: [resolve(),commonjs(),babel({babelHelpers: "bundled",exclude: "node_modules/**",}),terser(),],
};

以上配置中,plugins 分别使用了 @rollup/plugin-node-resolve@rollup/plugin-commonjs@rollup/plugin-babelrollup-plugin-terser 插件,分别用于解析依赖模块路径、转换 CommonJS 模块、将 ES6+ 语法转为 ES5 语法和对代码进行压缩和混淆。最终生成的打包文件为 dist/bundle.min.js,打包格式为 iife

4.external外部依赖

external选项是用来指定哪些模块是外部依赖,不需要被打包进最终的输出文件中的。这可以显著减小打包后的文件大小。

举一个打包目录的例子:

假设我们的打包目录结构如下:

├── src/
│   ├── index.js
│   ├── utils/
│   │   └── helper.js
│   └── lib/
│       └── lodash.js
├── dist/
└── rollup.config.js

其中,src/index.js 文件中引用了 src/utils/helper.jssrc/lib/lodash.js 两个文件中的一些函数和变量。

如果我们直接使用默认配置文件打包,最终生成的文件会包含 helper.jslodash.js 中的代码,导致最终的文件体积变得很大。

为了避免这个问题,我们可以配置 external 选项,告诉 Rollup 这两个文件应该被视为外部依赖。

rollup.config.js 中添加如下代码:

export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'cjs',},external: ['src/utils/helper.js', 'src/lib/lodash.js'],
};

这里使用了相对路径,直接指定要排除的文件。如果你选择使用模块名称,则需要在代码中使用 importrequire 去引入这些模块,并且在 external 中配置他们的名称,例如:

import { someFunction } from 'lodash';export default function test() {someFunction();
}
export default {input: 'src/index.js',output: {file: 'dist/bundle.js',format: 'cjs',},external: ['lodash'],
};

最终生成的代码将不会包含 helper.jslodash.js 中的内容,而是在运行时从外部获取这些依赖。

5.mode模式

在Rollup.js中,mode配置选项用于指定当前构建的模式,包括production和development两种模式。具体作用如下:

  1. production模式:启用各种代码优化,生成的代码体积更小,执行速度更快。通常用于生产环境。

  2. development模式:生成的代码不会进行优化,方便开发调试。通常用于开发环境。

举例说明:

当我们设置mode为production时,Rollup.js会自动开启代码压缩、Tree Shaking、Scope Hoisting等优化功能,以减小生成的代码体积和提高执行效率,适用于生产环境:

export default {input: 'src/index.js',output: {file: 'dist/bundle.min.js',format: 'iife',name: 'MyLibrary'},mode: 'production'
};

而当我们设置mode为development时,生成的代码不会进行优化,不会进行代码压缩、Tree Shaking、Scope Hoisting等操作,方便开发调试,适用于开发环境:

export default {input: 'src/index.js',output: {file: 'dist/bundle.dev.js',format: 'iife',name: 'MyLibrary'},mode: 'development'
};

三、总结

到这里大家是不是想到了一个老朋友,webpack.config.js,这些配置看上去是不是很像,哈哈哈
总的来说,rollup.config.js 是构建现代 JavaScript 应用程序的强大工具。在本文中,我们介绍了五个基础配置,包括输入文件、输出文件、插件、外部依赖和模式。这些配置可以帮助我们快速创建优化的 JavaScript 应用程序。但是,这只是 rollup.config.js 的冰山一角。还有很多高级配置和技巧可以使用,比如代码拆分、动态导入等等。了解 rollup.config.js 的所有特性和细节需要时间和经验,但是这些基础配置可以帮助我们快速开始并建立基础。希望这篇博客能够对你有所帮助,祝你在使用 rollup.config.js 构建 JavaScript 应用程序时愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序——“数据结构与算法”

各位CSDN的uu们你们好呀,今天小雅兰的内容是数据结构与算法啦,是排序!!!下面,让我们进入七大排序的世界吧!!! 排序的概念及其运用 排序的概念 排序:所谓排序…

GOF 23 种设计模式应用场景分析

写在前面 本文看下GOF 23 种设计模式应用场景,详细的还是通过文章给出参考链接学习下。 1:创建型 1.1:工厂设计模式 参考这篇文章 。 有几种产品需要创建,比如创建红苹果,青苹果,绿苹果,这些对象通过一…

【OpenCV】读入数字图像基础操作学习笔记

目录 读入数字图像: 窗口中显示图像: 将图像保存到本地: 窗口销毁(打开窗口就要销毁,以免影响后续十月): 等待输入: 读入数字图像: cv2.imread(所需读入的图像的完整路径(若图像在程序下的文件夹下也可直接输入图像名称),读入图像的形式) 读入图像的形式: cv2.IMREAD_CD…

8 君正视频采集的封装2

概述 在上一节中,我们进行了视频采集的需求分析,并封装了视频采集的接口类。在视频画面上,往往会叠加时间信息和各种文字信息,这就需要用到点阵字库。点阵字库一般有两种,一种是纯色字库,另一种是描边字库。纯色字库在视频背景色与文字颜色大致相同时,会导致文字很难辨认…

Pytorch个人学习记录总结 01

目录 函数-dir()、help() Dataset类 函数-dir()、help() dir() 函数,打开工具箱(例如PyTorch,进一步打开某一些分隔区) help() 函数,查看工具包中某一个工具函数的用法 (1) 查看torch工具包有哪些分割区 dir(torc…

19 数组静态初始化练习

语法: 数据类型[ ] 数组名称 {元素1,元素2,元素3}; public class Demo1 {public static void main(String[] args) {int[] arr {0,1,2,3};System.out.println(arr);System.out.println(arr[0]);System.out.println(arr[1]);System.out.pri…

SpringBoot中间件—ORM(Mybatis)框架实现

目录 定义 需求背景 方案设计 代码展示 UML图 实现细节 测试验证 总结 源码地址(已开源):https://gitee.com/sizhaohe/mini-mybatis.git 跟着源码及下述UML图来理解上手会更快,拒绝浮躁,沉下心来搞 定义&#x…

【C++杂货铺】拷贝构造函数

📖定义 拷贝构造函数是构造函数的一个重载,它的本质还是构造函数,那就意味着,只有在创建对象的时候,编译器才会自动调用它,那他和普通的构造函数有什么区别呢? 拷贝构造函数,是创建…

【数学建模】为什么存在最优策略?

一、说明 在进行优化回归过程,首先要看看是否存在最优策略? 在有限马尔可夫决策过程 (MDP) 中,最优策略被定义为同时最大化所有状态值的策略。换句话说,如果存在最优策略,则最大化状态 s 值的策…

内存函数及其模拟实现

身体扛不住的时候,意志会带你杀出重围 文章目录 一、memcpy函数 函数介绍 模拟实现 二、memmove函数 函数介绍 模拟实现 三、memset函数 函数介绍 模拟实现 大家好,我是纪宁。这篇文章给大家介绍C语言中常见的内存处理函数。 一、memcpy函数 …

20.matlab数据分析极限(matlab程序)

1.简述 计算极限 MATLAB提供计算极限的limit函数。在其最基本的形式中,limit函数将表达式作为参数,并在独立变量为零时找到表达式的极限。 例如,要计算函数f(x)(x^3 5)/(x^4 7)的极限,因为x趋向于零。 syms xlimit((x^3 5)/…

day42-servlet下拉查询/单例模式

0目录 1.Servlet实现下拉查询(两表) 2.单例模式 1.实战 1.1 创建工程,准备环境... 1.2 接口 1.3 重写方法 1.4 servlet 1.5 list.jsp list.jsp详解 2.单例模式 2.1 饿汉模式:在程序加载时直接创建对象&#…

学习系统编程No.32【线程互斥实战】

引言: 北京时间:2023/7/19/15:22,昨天更新完博客,和舍友下了一会棋,快乐就是这么简单,哈哈哈!总体来说,摆烂程度得到一定的改善,想要达到以前的水准,需要一定…

UTM 4.3 发布:在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS

UTM 4.3 发布:在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS 在 iOS 中虚拟化 Windows、Linux 和 Unix 请访问原文链接:https://sysin.org/blog/utm-4/,查看最新版。原创作品,转载请保留出处。 作者主页&#xf…

C语言:杨氏矩阵中查找某数(时间复杂度小于O(N))

题目: 有一个数字矩阵(二维数组), 矩阵的每行从左到右是递增的,矩阵从上到下是递增的, 请编写程序在这样的矩阵中查找某个数字是否存在, 要求:时间复杂度小于O(N)。 思路&#xff1…

《零基础入门学习Python》第057讲:论一只爬虫的自我修养5:正则表达式

如果你在课后有勤加练习,那么你对于字符串的查找应该是已经深恶痛绝了,你发现下载一个网页是很容易的,但是要在网页中查找到你需要的内容,那就是困难的,你发现字符串查找并没有你想象的那么简单,并不是说直…

(已解决)RuntimeError: Java gateway process exited before sending its port number

今天用Pycharm远程使用pysaprk解释器时,跑代码出现了这个错误: RuntimeError: Java gateway process exited before sending its port number 找了好多博客都没解决问题,有说重装spark的,有说本地配Java_home的,后面我…

leetcode 47. 全排列 II

2023.7.23 这道题是上一题全排列 的一个升级版。 唯一区别就是需要增加一个树层去重的操作&#xff0c;因为数组nums中允许有重复的元素了&#xff0c;而上一题没有重复元素。 下面看代码&#xff1a; class Solution { public:vector<vector<int>> ans;vector<…

如何评测一个大语言模型?

编者按&#xff1a;大型语言模型&#xff08;Large language models, LLMs&#xff09;因其在学术界和工业界展现出前所未有的性能而备受青睐。随着 LLMs 在研究和实际应用中被广泛使用&#xff0c;对其进行有效评测变得愈发重要。近期已有多篇论文围绕大模型的评测进行研究&am…

RocketMQ教程-(4)-领域模型-消费者分组ConsumerGroup

定义​ 消费者分组是 Apache RocketMQ 系统中承载多个消费行为一致的消费者的负载均衡分组。 和消费者不同&#xff0c;消费者分组并不是运行实体&#xff0c;而是一个逻辑资源。在 Apache RocketMQ 中&#xff0c;通过消费者分组内初始化多个消费者实现消费性能的水平扩展以…