rollup 本身不直接打包 html 文件,它默认忽略 .html 文件,需借助 @rollup/plugin-html 等插件将 html 作为资源参与构建,实现脚本注入、路径替换和输出复制等功能。

Rollup 本身不直接打包 HTML 文件
Rollup 是一个 JavaScript 模块打包器,它的核心职责是处理 import/export 语句、树摇(tree-shaking)、生成 ES/CJS/UMD 等格式的 JS 输出。它**默认完全忽略 .html 文件**——你直接把 index.html 放进 input 配置里,Rollup 会报错或静默跳过。
所以「用 Rollup 打包 HTML」的真实含义,其实是:在 JS 构建流程中,把 HTML 当作资源参与构建(如注入 script 标签、替换占位符、复制到输出目录)。这需要插件协同完成。
必须用插件:@rollup/plugin-html 或 rollup-plugin-html
目前主流选择是 @rollup/plugin-html(官方维护,v2+ 推荐),它提供 html() 插件函数,支持:
- 读取 HTML 模板(如
src/index.html) - 自动注入生成的 JS bundle 路径(
<script src="bundle.js"></script>) - 支持
<link rel="modulepreload">注入 - 可配置
title、meta、自定义inject逻辑
安装与基础用法:
npm install --save-dev @rollup/plugin-html
在 rollup.config.js 中启用:
import { html } from '@rollup/plugin-html';
export default {
input: 'src/main.js',
plugins: [
html({
template: 'src/index.html', // 必须存在,否则报错
fileName: 'index.html' // 输出名,默认 'index.html'
})
],
output: {
dir: 'dist',
format: 'es'
}
};
注意:template 路径是相对于当前工作目录(通常是项目根目录),不是相对于配置文件路径。
HTML 中 script 标签必须留空或用占位符
@rollup/plugin-html 默认会查找 <script type="module"></script> 或 <script></script> 标签,并用生成的 bundle 替换其内容或 src 属性。但它**不会自动添加 <script></script> 标签**——你得在模板里先写好空标签或占位结构:
- ✅ 正确(推荐):
<script type="module" src="./dummy.js"></script>→ 插件会把src替换为实际 bundle 名(如main.abc123.js) - ✅ 可行:
<script type="module"></script>→ 插件会在其中注入内联代码(不推荐,破坏缓存) - ❌ 错误:
<script></script>且无type="module"→ 默认不识别,需手动配置inject
如果要用 hash 文件名(如 main.a1b2c3.js),确保 output.entryFileNames 和 output.chunkFileNames 已配置,否则插件无法正确推导 URL。
常见报错和绕过方式
典型错误信息:Error: Could not resolve entry module 或 PluginError: html: No <script> tag found</script>,多由以下原因导致:
-
template路径错误或文件不存在 → 检查路径是否拼写正确,是否用了path.resolve()处理相对路径 - HTML 模板里没写任何
<script></script>标签 → 至少加一个空的<script type="module"></script> - Rollup 输入是 HTML(如
input: 'src/index.html')→ 这会导致解析失败,input必须指向 JS 入口 - 使用了
dynamicImport但未启用experimentalDynamicImport: true(旧版 Rollup)→ 现代版本已默认支持,无需额外配置
如果你只是想复制 HTML 到输出目录(不做注入),更轻量的做法是用 rollup-plugin-copy,而非强上 html 插件。
HTML 不是模块,它只是个容器。Rollup 的角色始终是“生成 JS”,而 HTML 插件只是帮忙把 JS 塞进去——这个边界模糊的地方,最容易漏掉模板里的 script 标签,或者误以为 Rollup 能像 Webpack 那样自动创建 HTML。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











