rspack.HtmlRspackPlugin
是使用 Rust 实现的高性能 HTML 插件,你可以使用它来为 Rspack 项目生成 HTML 文件。
在使用 rspack.HtmlRspackPlugin
之前,请注意 rspack.HtmlRspackPlugin
和社区的 html-webpack-plugin 插件存在一些差异。
由于 rspack.HtmlRspackPlugin
是基于 Rust 实现的,因此它的构建性能显著高于 html-webpack-plugin 插件,尤其是在构建大量 HTML 文件的场景下。
rspack.HtmlRspackPlugin
的功能是 html-webpack-plugin
的子集。为了保证插件的性能,我们没有实现 html-webpack-plugin 提供的所有功能。
如果它提供的配置项无法满足你的需求,你也可以直接使用社区的 html-webpack-plugin 插件。
这个插件会为你生成一个 HTML 文件,该文件的 head 包含了所有 JS 产物对应的 <script>
标签。
只需像这样,将插件添加到你的 Rspack 配置中:
这将生成一个包含以下内容的 dist/index.html
文件:
如果你的 Rspack 配置中有多个 entry points,它们的生成 <script>
标签都会被包含在这个 HTML 文件中。
如果你的构建产物中有一些 CSS 资源,它们将被包含在 HTML head 的 <link>
标签中。
你可以向 rspack.HtmlRspackPlugin
传递一些配置项,支持的选项如下:
{}
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
title | string|undefined | undefined | 构建 HTML 的标题 |
filename | string | 'index.html' | 输出的文件名,可以指定子目录,例如 pages/index.html |
template | string|undefined | undefined | 模版文件路径,支持 ejs |
templateContent | string|undefined | undefined | 模版文件内容,优先级大于 template |
templateParameters | Record<string, string> | {} | 传递给模版的参数 |
inject | 'head'|'body'|undefined | undefined | 产物注入位置 |
publicPath | string | '' | script 和 link 标签的 publicPath |
scriptLoading | 'blocking'|'defer'|'module' | 'defer' | 现代浏览器支持使用 defer 来异步加载 js,设置为 module 则会添加 type="module" 同时使用 defer |
chunks | string[]|undefined | undefined | 配置需要注入的 chunk,默认注入所有 chunk |
excludedChunks | string[]|undefined | undefined | 配置需要跳过注入的 chunk |
sri | 'sha256'|'sha384'|'sha512'|undefined | undefined | sri hash 算法,默认不开启 sri |
minify | boolean | false | 是否启用压缩 |
favicon | string|undefined | undefined | 配置 HTML 图标 |
meta | Record<string, string|Record<string, string>> | {} | 配置需要注入 HTML 的 meta |
如果默认生成的 HTML 不符合你的需求,你可以使用自己的模板。
最简单的方式是使用 template
选项,并传递一个自定义的 HTML 文件。rspack.HtmlRspackPlugin
将会自动将所有需要的 JS、CSS 和 favicon 文件注入到 HTML 中。
index.html
文件:template
选项:如果你有多个 entry points,并希望为每个 entry 生成一个 HTML 文件,那么你可以注册多个 rspack.HtmlRspackPlugin
:
filename
来为每个 HTML 文件指定名称。chunks
来为每个 HTML 文件指定需要包含的 JS 产物。比如以下配置,会生成 foo.html 和 bar.html,其中 foo.html 仅会包含 foo.js 生成的 JS 产物。