全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-23 8 分钟 ✍️ juanwangdev

Rollup 生产构建原理

Vite 生产构建底层使用 Rollup,生成高度优化的产物。

Rollup 构建流程

JavaScript
1. 入口分析 → 扫描依赖 → 构建模块图
2. 依赖分析 → Tree Shaking → 标记导出
3. Chunk 分割 → 代码合并 → 生成产物
4. 资源处理 → 哈希命名 → 输出文件

模块图构建

JavaScript
// Rollup 分析入口依赖
import App from './App.vue'
import router from './router'
import { createStore } from 'pinia'

// 递归分析每个 import
// 构建完整依赖图

Tree Shaking 原理

text
// 源码
export function used() { }
export function unused() { }

// 代码中使用
import { used } from './utils'

// 构建后,unused 被移除
export function used() { }

注意:Tree Shaking 移除未使用的导出,减小产物体积。

Chunk 分割算法

Rollup 根据:

  • 模块依赖关系
  • 动态导入边界
  • manualChunks 配置
  • 入口共享分析

自动分割 chunk:

text
入口共享 → vendor chunk
动态导入 → 异步 chunk
配置分包 → 自定义 chunk

构建产物结构

text
dist/
├── index.html           # 入口
├── assets/
│   ├── index-[hash].js  # 入口 chunk
│   ├── vendor-[hash].js # 依赖 chunk
│   ├── lazy-[hash].js   # 懒加载 chunk
│   └── index-[hash].css # CSS 文件

Chunk 内容

Chunk内容
index业务代码入口
vendor第三方依赖
lazy动态导入模块

Rollup vs Webpack

特点RollupWebpack
Tree Shaking原生支持需配置
ES Module输出 ESM输出 Bundle
产物体积更小较大
代码分割静态分割动态分割

要点总结

  • Rollup 构建模块图分析依赖
  • Tree Shaking 移除未使用代码
  • Chunk 分割基于依赖和配置
  • 产物体积更小,ESM 输出
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 esbuild 预构建优化
下一篇 → 模块图与依赖分析
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码