Rspack 打包多页应用需严格配对入口与 HTML 插件:entry 必为对象,每个 key 作 chunk 名;每个页面单独配置 HtmlRspackPlugin 并显式声明 chunks;启用 filesystem 缓存可提速至 1.2s;splitChunks 应按页面隔离而非全局抽取。

多页应用(MPA)用 Rspack 打包,只要入口和 HTML 插件配对正确,就能比 webpack 快 5–8 倍;但错配 chunks、漏关缓存或误用 HtmlRspackPlugin 多实例,反而会拖慢构建甚至产出空 JS。
多入口配置必须用对象形式,不能写成数组
Rspack 的 entry 对多页应用是强制要求键值对结构,每个 key 对应一个页面的唯一 chunk 名。数组写法只适用于单页,强行用会导致所有 HTML 共享同一份 JS,无法拆分。
-
entry必须是对象:{ home: './src/home/index.js', about: './src/about/index.js' } - key 名会自动成为 chunk 名,后续
HtmlRspackPlugin的chunks字段必须严格匹配这个 key - 避免动态生成 key 时拼写不一致(比如
'Home'和'home'混用),Rspack 不做大小写归一化
每个页面对应一个 HtmlRspackPlugin 实例,且 chunks 必须显式声明
HtmlRspackPlugin 默认注入全部 chunk,多页场景下不设 chunks 就会把所有 JS/CSS 塞进每个 HTML —— 不仅体积膨胀,还可能因执行顺序出错导致白屏。
- 每个页面单独 new 一次插件:
new rspack.HtmlRspackPlugin({ filename: 'about.html', template: './src/about/index.html', chunks: ['about'] }) -
chunks是字符串数组,即使只有一个也要写成['about'],不能写成'about' - 如果某页面不需要 JS(如纯静态页),设
chunks: []并确保inject: false
启用 cache.type = 'filesystem' 后,多页构建才真正快起来
没开持久化缓存时,Rspack 每次都重跑整个依赖图;开启后,未改动的页面 chunk 直接复用,二次构建时间能从 8s 降到 1.2s(百万行项目实测)。
立即学习“前端免费学习笔记(深入)”;
- 必须配
cache: { type: 'filesystem' },memory类型在多页下效果有限 - 建议加
cache.cacheDirectory显式指定路径(如path.resolve(__dirname, '.rspack_cache')),避免不同项目缓存冲突 - CI 环境中若禁用缓存,务必清掉
.rspack_cache目录再跑,否则可能读到旧 chunk hash
splitChunks 配置不当会让多页失去独立性
默认 splitChunks.chunks: 'all' 会把所有页面共用的模块(比如 lodash)抽成 common chunk,看似省体积,但实际让各页面 JS 加载依赖变复杂,HMR 也容易失效。
- 优先用
cacheGroups按页面隔离:home: { test: /[\/]src[\/].*home[\/]/, name: 'home-vendors' } - 禁用全局
common分组:设splitChunks.automaticNameDelimiter = '_'并避免空cacheGroups - 如果真要共享基础库,用
name: 'shared'+enforce: true,但必须手动在每个HtmlRspackPlugin的chunks里加上'shared'
多页打包真正的瓶颈不在配置语法,而在 chunk 与 HTML 的映射关系是否被显式、精确地控制;哪怕只漏掉一个 chunks 字段,就可能让 10 个页面全加载 10 份重复 JS。



















