Rollup:轻量高效的JS模块打包利器 [特殊字符](现代前端开发的秘密武器!)

rollup 实现多模块打包 以上大体实现了通过 rollup 实现多模块打包的功能。 阅读详情


> **关键洞察**:在JavaScript生态这个高速迭代的战场,模块打包器的选择直接决定了你的构建流水线是“丝滑如德芙”还是“卡成PPT”!今天咱们就深挖一下**Rollup**——这个被Vue、React等顶流框架选中的打包引擎,究竟藏着什么杀手锏?(剧透:它能把你的库代码压榨到极致!)

## 一、先唠个嗑:为啥要打包?世界太破碎了!

想想你写前端的日子:
- `import utils from './utils.js';`  
- `import { debounce } from 'lodash-es';`  
- 甚至动态加载 `import('./bigModule.js')`  

**问题来了**:浏览器可不天生懂这些“高级货”!几十个甚至上百个模块文件???HTTP请求能直接崩掉!(浏览器:我承受了这个年纪不该承受的压力😭)

### 模块化简史(5秒看懂版):
1. **IIFE时代**:用`(function(){...})()`包裹代码,避免污染全局(原始但有效!)  
2. **AMD/Require.js**:浏览器端异步加载(“回调地狱”的亲兄弟👹)  
3. **CommonJS (Node.js风格)**:`require('./module')`(同步加载,Node用爽,浏览器懵圈)  
4. **ES Modules (ESM)**:`import/export`语法(官方标准!未来之光🌟)  

**打包器的核心使命**:把散落的模块“拼图”组装成**少量**浏览器能理解的静态文件(JS/CSS/图片等),同时进行压缩、优化等骚操作!

---

## 二、Rollup VS Webpack:不是替代,是分工!

(⚠️ 声明:这不是战场!工具选型要看场景!)

| **特性**         | **Rollup**                  | **Webpack**               |
|------------------|----------------------------|--------------------------|
| **初始目标**      | 库/Library打包             | 应用/Application打包     |
| **Tree Shaking** | **静态分析王者**!默认干掉未用代码 | 需要配置,效果略逊一筹    |
| **输出格式**      | 专注ESM,也支持CJS/UMD等   | 主力Bundle(各种格式复杂转换)|
| **代码纯度**      | 输出更干净,少运行时代码     | 注入较多运行时代码(如模块加载)|
| **生态插件**      | 轻量核心,插件扩展能力强     | 生态巨无霸,插件海量       |
| **HMR热更新**    | 需要插件(如`vite`底层用它)| 原生支持强大              |

**人话总结**:  
- 写 **Vue/React组件库**、**工具库**、**SDK**?Rollup是你的天选之子!(输出小到哭!)  
- 搞 **企业级SPA应用**,需要图片/字体/CSS处理?Webpack依然稳如老狗!(生态救大命!)  

---

## 三、动手!10分钟创建一个Rollup项目(实战代码警告⚠️)

### 步骤零:初始化(别跳过!)
```bash
mkdir my-rollup-project && cd my-rollup-project
npm init -y  # 一路回车生成package.json

步骤一:安装核心依赖(Rollup本体+常用插件)

npm install rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs rollup-plugin-terser --save-dev
  • @rollup/plugin-node-resolve: 解析node_modules中的第三方模块(比如lodash-es)
  • @rollup/plugin-commonjs: 将CommonJS模块转成ESM(让你能import老的npm包)
  • rollup-plugin-terser: 代码压缩混淆(让产物瘦身!)

步骤二:创建配置文件 rollup.config.js (核心灵魂!)

import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import terser from 'rollup-plugin-terser';

export default {
  // 入口文件(你的主JS)
  input: 'src/main.js',

  // 输出配置
  output: {
    file: 'dist/bundle.min.js', // 输出文件名
    format: 'esm',             // 输出格式:esm, cjs, umd, iife...
    name: 'MyAwesomeLib',      // 当format为umd/iife时,挂载到全局的名字
    sourcemap: true            // 生成sourcemap(调试必备!)
  },

  // 插件数组(顺序有时很关键!)
  plugins: [
    resolve(),       // 解析node_modules
    commonjs(),      // 转换CJS模块
    terser()         // 压缩代码 (生产环境必选!)
  ]
};

步骤三:写点代码试试水 (src/main.js)

// 引入一个工具函数
import { uniqueId } from 'lodash-es'; 

// 导出一个简单功能(库的API)
export function generateID(prefix = 'id_') {
  return prefix + uniqueId();
}

步骤四:运行打包命令!(见证奇迹时刻✨)

在package.json中添加脚本:

"scripts": {
  "build": "rollup -c"  // -c 表示使用配置文件
}

终端执行:

npm run build

恭喜! 去dist文件夹看你的bundle.min.js吧!你会发现:

  1. 只打包了lodash-es中用到的uniqueId相关代码!(Tree Shaking显神威!)
  2. 代码被压缩得亲妈都不认!(terser立功了)

四、Rollup进阶技巧:解锁隐藏威力 🔥

1. 代码分割(Code Splitting)动态加载

Rollup也能玩动态导入!配置output.dir替代output.file:

output: {
  dir: 'dist',         // 输出目录
  format: 'esm',
  chunkFileNames: '[name]-[hash].js' // 分割后的chunk命名规则
}

代码中使用动态导入:

// 点击按钮才加载大模块!
button.addEventListener('click', async () => {
  const bigModule = await import('./bigModule.js');
  bigModule.doHeavyTask();
});

2. 搞定CSS和其他资源(插件是王道!)

  • CSS处理:用rollup-plugin-postcss(支持SCSS/Less、自动加前缀、提取CSS文件)
  • 图片/字体:@rollup/plugin-image + rollup-plugin-url(转base64或拷贝文件)
  • Babel转译:@rollup/plugin-babel(兼容老浏览器必备)

3. 开发服务器 + 热更新!用Vite啊朋友们!!!

(超级安利!!!)
Vite 的底层开发服务器就是基于Rollup的!它利用浏览器原生ESM加载,冷启动快到飞起⚡️。用Vite开发,Rollup生产打包,完美组合拳!


五、Rollup的“灵魂”:为什么它的Tree Shaking这么强?

核心原理:ESM是静态的!!!

对比一下:

// ESM (静态 - Rollup的最爱!❤️)
import { funcA } from 'moduleA'; // 编译时就能确定导入
export { funcB };                // 编译时确定导出

// CommonJS (动态 - Rollup需要插件转换)
const _ = require('lodash');     // 执行时才能确定
module.exports = { ... };        // 执行时确定

Rollup的绝招:

  1. 在打包初始阶段,就建立完整的模块依赖图谱。
  2. 像侦探一样🧐,静态分析每个import和export语句。
  3. 精准标记未被使用的函数/变量(“死代码”)。
  4. 在最终Bundle中,无情删除这些“死代码”!

结果:你的工具库如果只导出了20个函数,用户只用其中5个,那另外15个绝不会出现在用户的Bundle里!(库作者感动哭了😭)


六、什么时候该用/不该用Rollup?(掏心窝子建议)

✅ 放心用Rollup的场景:

  • 开发 JavaScript库/框架/插件 (Vue, React, D3等都在用它!)
  • 构建 浏览器原生ES模块 (现代浏览器的未来!)
  • 追求 极致的输出大小和运行性能
  • 项目结构相对简单,资源类型较少

⚠️ 慎重考虑/搭配Webpack的场景:

  • 巨型 SPA应用,需要处理大量图片、字体、CSS预处理器等(Webpack生态更成熟)
  • 重度依赖 Webpack特有功能 (如Module Federation微前端)
  • 项目需要 高度定制化的开发服务器和HMR (直接用Vite开发,Rollup生产打包!)

结语:拥抱正确的工具,别让打包器成为瓶颈!

Rollup 用它的简洁哲学和极致优化,在库开发领域立下了标杆。它可能不是万能的瑞士军刀,但在它的专长领域——产出高效、精简、符合未来的ESM模块——绝对是顶级高手!

试试看吧!下次写工具库时,别再用Webpack“大炮打蚊子”了🦟。给你的代码一个更轻盈的起飞姿势,Rollup值得你投入一个下午!(搞定了记得回来喊句“真香”!)

终极提示:Vite + Rollup 是现代前端工具链的黄金搭档。Vite负责闪电开发⚡️,Rollup负责稳定高效生产📦。这个组合,用过的都说好!


智能座舱架构与芯片- (9) 音频篇 上 从A2B收发器衍生出来的简化产品具备各种级别的功能,例如端点从节点(不支持TDM)、简化型主节点(支持较短的电缆和更少的从节点数量),以及简化型端点从节点(支持较短电缆和更少的PDM输入)。例如,AVB中的talker和listener是不同的设备,它们的参考时钟源可能并不相同。传统的车载收音机通过天线接收无线电信号,然后由调谐模块(Tuner)进行信号调谐,信道过滤,信道均衡,多路改善,信号解调等,转为数字信号后再交给DSP进行立体声解码,噪声抑制,弱信号处理,最后从车载音响系统进行播放。 阅读详情

相关推荐

Unity URP 深度解析:利用Stencil与RenderFeature实现高效遮挡高亮

本文深入解析Unity URP中利用Stencil与RenderFeature实现高效遮挡高亮的技术方案。通过模板缓冲机制和自定义RenderFeature,开发者可以在保持场景完整性的同时,清晰标识被遮挡物体位置,提升游戏体验。文章详细介绍了Shader编写、URP管线配置及性能优化技巧,并提供了常见问题排查方法。

weixin_29012677的博客 479

【实战篇】最详细的Rollup打包项目教程

自动将 dependencies 依赖声明为 externals支持处理外部 npm 依赖支持基于 CommonJS 模块引入支持 typescript,并导出声明文件支持 scss,并添加前缀支持自动清除调试代码打包输出文件保留原始模块结构支持按需加载rollup是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。rollup为什么是rollup而不是webpack呢?rollup的特色是ES6模块和代码,这些webpack。

小陈的博客 1万+

Opencv2.4.9源码分析——HoughCircles

图形可以用一些参数进行表示,标准霍夫变换的原理就是把图像空间转换成参数空间(即霍夫空间),例如霍夫变换的直线检测就是在距离-角度空间内进行检测。圆可以表示成: (x-a)2+(y-b)2=r2                   (1) 其中a和b表示圆心坐标,r表示圆半径,因此霍夫变换的圆检测就是在这三个参数组成的三维空间内进行检测。 原则上,霍夫变换可以检测任何形状。但复杂的形状需要的

赵春江的专栏 3万+

vite里的Rollup打包配置

本文介绍了Vite项目中通过build.rollupOptions自定义Rollup打包配置的方法。主要内容包括基础配置中的external(忽略外部依赖)、input(入口文件设置)和output(输出配置),以及进阶配置中的assetFileNames(静态资源命名规则)。文章详细说明了各项参数的取值方式和使用场景,并提供了代码示例,如多入口配置、动态生成入口文件等。还介绍了输出格式(amd/cjs/es/iife/umd/system)的选择和全局变量映射等高级用法,帮助开发者根据项目需求灵活定制打包

青蛙king的博客 9350

STM32F103C8T6用官方bootloader实现IAP升级操作方法

在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修...

HXYDJ的博客 1万+

SPARTAN6 + Verilog - FPGA step by step 从0开始学习(1)

SPARTAN6 + Verilog - FPGA step by step 从0开始学习(1)Step 1 软件安装Step 2 硬件获取Step 3 开始从头到脚建一个工程Step 3.1 新建一个工程 从0开始学习FPGA,最好的办法就是先建一个最简单的模块,并且跑起来,然后再慢慢展开。下面这个例子是要按照一定的周期点亮核心板上的一个led。 Step 1 软件安装 这个从0开始学习是用的xilinx的SPARTAN6。SPARTAN6集成开发环境用ISE,不能用Vivado,各自对应的版本不同。安装

xfacexx点点记录 5516

rollup打包工具

rollup是一个模块化的打包工具,会将javascript文件进行合并。比起webpack,webpack在打包的时候会进行代码注入(保障兼容性),如果对于一些项目,特别是类库,没有其他的静态资源文件,就可以使用rollup。rollup支持es6模块,支持tree-shaking,不支持code-splitting,模块热更新tree shaking优化: tree shaking是一种优化技术,用于剔除未使用的代码,减少最终的文件大小ES6模块支持。

m0_73280507的博客 1262

整车 EOL下线 测试系统介绍

整车下线(EOL)测试专门针对整车进行设计开发,是车企将组装好的整车交付客户前的 最后一道检测工序。EOL 测试针对的是整车下线测试,不同于零部件下线,是整车级别的下线 测试,测试过程关系整车的每个零部件,其测试质量直接影响到整车的质量好坏。因此,整车EOL测试是整车下线必不可少的测试过程.

王小奎的博客 5488

JS项目打包之ROLLUP.JS入门

Rollup是一个用于JavaScript的模块打包器,它将小块代码编译成更大、更复杂的东西,例如库或应用程序。它为JavaScript ES6版本中包含的代码模块使用了新的标准化格式,而不是以前的特殊解决方案,如CommonJS和AMD。ES模块可以让您自由无缝地组合您喜爱的库中最有用的单个函数。这最终在任何地方都是可能的,但Rollup让你今天就可以做到。

火柴盒 802

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

构建一个带 GPU 支持的深度学习开发镜像;使用 PyTorch 2.5.1(CUDA 12.4)环境;发布并托管 Docker 镜像至 Docker Hub;验证 GPU 环境正常运行!🎉 这将极大提升你的项目部署效率,尤其是在多人协作或跨平台部署场景中。

用大模型重构生活:猫奴程序员的AI智能日常记录 1579

036、算子映射:如何将ONNX算子映射到NPU硬件指令?

《算子映射:ONNX到NPU的转换艺术》 本文深入探讨了将ONNX算子映射到NPU硬件指令的技术挑战与实践经验。作者通过真实案例揭示了映射过程中的常见陷阱,如Reshape算子被错误映射导致分类错误。文章详细分析了三种映射策略(直接映射、拆分映射和融合映射),并强调映射表在编译器中的核心作用。特别针对动态形状、精度对齐等难题提供了解决方案,分享了编写映射表时的实用铁律,包括先优化后映射、严格单元测试等。最后指出,成功的算子映射需要在数学语义、硬件约束和性能优化之间找到精确平衡,这种看似枯燥的工作实则决定着N

m0_50546716的博客 189

Rollup入门与进阶:为现代Web应用构建超小的打包文件

Rollup 是一个轻量且高效的 JavaScript 打包工具,特别适用于构建库和模块化应用程序。与 Webpack 相比,Rollup 能生成更精简的代码,通过 tree-shaking 去除未使用的代码,优化模块。Rollup 支持 ES 模块格式,插件丰富,可高度自定义。本文详细介绍了 Rollup 的初始化、配置、Babel 转换、多入口打包、加载三方依赖、TypeScript 支持、代码压缩、HTML 模板生成、开发服务器启动、Vue 组件处理以及 CSS 压缩等功能。

ztK63LrD的博客 2073

SSH 远程登录报错:kex_exchange_identification: Connection closed.....

不知道为啥会出现这样的情形,最近这段时间登录都是正常的,不知道哪里抽风了,就提示这个。错误信息 kex_exchange_identification: Connection closed by remote host 出现在尝试使用 SSH 连接到远程服务器过程中,表明在密钥交换阶段的一开始,远程主机就关闭了连接。服务器的sshd_config文件中配置错误,可能是不允许的加密算法、修订文件中的语法错误,或者未正确指定用于SSH的HostKey。如果当前已有太多活动连接,新的连接尝试可能会被拒绝。

飞越蓝天的专栏 8297

【rollup】rollup打包一个npm包

rollup打包一个npm包的例子。

qq_48896417的博客 1253

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

rollup打包工具快速入门

rollup打包工具快速入门

寂寥人生 2894

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Vite 构建基石(上)——Rollup 打包基本概念及使用

output。

江拥羡橙的博客 2898

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Rollup详解

是一个 JavaScript 模块打包工具,专注于 ES 模块的打包,常用于打包 JavaScript 库。下面从它的工作原理、特点、使用场景、配置和与其他打包工具对比等方面进行详细讲解。

刚刚开始写播客.... 1231

rollup 打包实践

原文链接 简介 rollup 是一款像 webpack 一样的JS代码打包工具。它特别适合类库的维护,有了它你可以把单个复杂庞大的类库拆分成多个文件模块编写,最终打包成符合UMD、AMD、ESM等格式的单个或多个文件。它可以利用最新的ES6+ modules 规范,Tree-Shaking 不需要的代码,这样你就可以放心的引入你喜欢类库中的某个方法,而不必担心引入整个类库。 Vue 官方使用 ...

foolbird 2181

rollup.js 一个简单实用的打包工具

​ 最近在看vue3相关的知识的时候,发现了一个新的打包工具,至少于我而言是新鲜的。它就是rollup.js。一说到JS打包、合并、压缩、模块处理等都会想到webpack,这是王者,当然入门的难度偏高。而vue3中搭配的vite运行速度确实非常快,里边有很多的rollup.js相关的回调函数。而我们今天就来简单的看看rollup.js打包神器。官网地址为Rollup | Rollup ​

诸葛韩信--一个前往前端不归路的浪子 1613

rollup 实战第三节 打包生产

前面讲过了,rollup如何打包开发环境。现在肯定是打包成生产环境了。本次需要实现的功能是把库打包成生产环境。由于本次代码是基于前两次的基础上的,如果有问题的还请移步前两节。 (实战 rollup 第一节入门) (rollup 实战第二节 搭建开发环境) 打包生umd, cjs, esm的文件 vue 源码打包的分为以下几种(umd, cjs, esm) react 源码打包也是上面的三种(umd, cjs, esm) 所有的学习都是从模仿开始,那咋们也来配置一下,打包成这三种类型的js. 打包.

twinkle的博客 3801

常用打包工具

rollup

EmotionComputer 554

初识rollup 打包、配置vue脚手架

rollup javascript 代码打包器,它使用了 es6 新标准代码模块格式。 面向未来,拥抱 es 新标准,支持标准化模块导入、导出等新语法。 tree shaking 静态分析导入的代码。排除未实际引用的内容

ngd-b的博客 2038

小巧而专注的打包工具rollup

Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序优点: 小巧而专注。

muqin6610的博客 926

rollup.js 模块打包

rollup.js是Javascript的ES模块打包器 工作原理: 3.1配置文件模式: 4.配置文件 4.1模式一(单文件配置模式) 根目录下创建rollup.config.js ES模块标准编写 4.1模式一(双文件配置模式) 输入配置文件 创建rollup-input-options.js CommonJS格式 输出配置文件 创建rollup-output-options.js CommonJS格式 写个打包逻辑js rollup-build.js 执行 babel-node,ES标准的代码

zhao1239902的博客 1723

rollup打包原理以及实现rollup

前言 上一篇文章已对rollup具体使用做了详细的介绍,这篇文章学习下rollup原理。由于篇幅有限,拉取了rollup最初版本的代码(0.3.0版本)。我的目的是学习 rollup 怎么打包的,怎么做 tree-shaking 的。而初版源码已经实现了这两个功能(半成品),所以看初版源码已经足够了。 前置知识 rollup 使用了 acorn 和 magic-string 两个库。为了更好的阅读 rollup 源码,必须对它们有所了解。 "dependencies": { "acorn": "^1.1

yutao618的博客 6645

如何选择打包工具:Rollup 和 Webpack ?

输出结果更加扁平,执行效率更高;自动移除未引用代码;打包结果依然完全可读。加载非 ESM 的第三方模块比较复杂;因为模块最终都被打包到全局中,所以无法实现 HMR;浏览器环境中,代码拆分功能必须使用 Require.js 这样的 AMD 库。综合以上特点,我们发现如果我们开发的是一个应用程序,需要大量引用第三方模块,同时还需要 HMR 提升开发体验,而且应用过大就必须要分包。那这些需求 Rollup 都无法满足。

我乐了的博客 1676
上一篇: Containerd:容器宇宙里那个默默扛事的老黄牛(但你真该认识它了!)
下一篇: 容器引擎的心脏:揭秘 Containerd,低调但不可或缺的力量!
普通网友
博客等级 码龄1年 18粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值