Resolve page URLs
Option: router
type Router =
| boolean
| {
enabled?: boolean;
test?: RegExp | Array<RegExp>;
rewriteIndex?: false | string;
resolve?: (props: {
sourceRoute: string;
outputRoute: string;
sourceFile: string;
outputFile: string;
}) => void | string;
};
enabled- Enable / disable the route resolving. Defaultstrue.test- The router resolves values matching to the RegExp only.
Defaults, defined the same as plugin.test option to match templates of used preprocessor.rewriteIndex- Rewrite theindex.html.- If publicPath is
auto, replacesindex.htmlwith the specified string, should be on of:'.',''(empty). - If publicPath is not empty, replaces
index.htmlwith''(empty) regardless of specified value. - If the route URL contains a query or a segment (e.g.
index.html#contact), therewriteIndexis ignored. resolve()- Allow modify the resolved route URL.
The argument is the object:sourceRoute- The resolved attribute value (absolute path).outputRoute- The output URL regards publicPath, e.g. byautopublicPath is relative tooutputFile.sourceFile- The absolute path to the template file where is resolved thesourceRoute.outputFile- The output HTML filename ofsourceFile, relative to thedist/directory.
Return:- void - Do nothing.
- string - The returned string replaces the value.
The router option enable resolving of a.href (by defaults) values as a route URL to inner pages.
This is useful for multi-page sites.
Using the sources option you can specify any tag attribute which should be resolved.
noteThe router resolves routes specified in the
entryplugin option only. An external URL will be ignored.
const HtmlBundlerPlugin = require('html-bundler-webpack-plugin');
module.exports = {
resolve: {
alias: {
// recommended to use the alias for the route in templates
'@views': path.join(__dirname, 'src/views/pages'),
},
},
plugins: [
new HtmlBundlerPlugin({
entry: {
// multi-pages
index: './src/views/pages/home/index.html',
'news/sport/index': './src/views/pages/news/sport/index.html',
},
router: true, // enable resolving of route URLs in a.href
}),
],
};
In templates, specify the source path to the linked template.
The linked template must be specified in the entry plugin option too.
The source ./src/views/pages/index.html
<html>
<body>
<h1>Home</h1>
<a href="@views/home/index.html">Home</a> | <a href="@views/news/sport/index.html">Sport</a>
</body>
</html>
The source ./src/views/pages/news/sport/index.html
<html>
<body>
<h1>Sports News</h1>
<a href="@views/home/index.html">Home</a> | <a href="@views/news/sport/index.html">Sport</a>
</body>
</html>
tipIf you use a template, you can include navigation as a partial on all pages, since the route URLs will be automatically resolved from their source files.
The generated dist/index.html
<html>
<body>
<h1>Home</h1>
<a href="index.html">Home</a> | <a href="news/sport/index.html">Sport</a>
</body>
</html>
The generated dist/news/sport/index.html
<html>
<body>
<h1>Sports News</h1>
<a href="../../index.html">Home</a> | <a href="index.html">Sport</a>
</body>
</html>
tipYou can use the
router.rewriteIndexoption to rewrite theindex.html.