This is an extension plugin for the webpack plugin html-webpack-plugin - a plugin that simplifies the creation of HTML files to serve your webpack bundles.
Typically, html-webpack-plugin injects <script>
and <link>
elements into generated HTML.
When used with a template, html-webpack-plugin will still inject new elements regardless of whether or not elements already exist for the assets.
This plugin will automatically update the URLs for existing <script>
and <link>
elements in an HTML template with URLs generated by Webpack.
It identifies existing elements by comparing their URLs with the generated output file name from Webpack. See Example section.
Webpack doesn't handle CSS resources natively. However, by using some of the following plugin combinations you can make them accessible to html-webpack-plugin:
- copy-webpack-plugin (npm) (github),
html-webpack-include-assets-plugin (npm) (github) - extract-text-webpack-plugin (npm) (github) (warning: untested)
- node >= 6.11.5
Install the plugin as a development dependency using npm:
$ npm install replace-url-html-webpack-plugin --save-dev
The plugin has no configuration. Simply, add the plugin to your webpack config as follows:
{
plugins: [
new HtmlWebpackPlugin(),
new ReplaceUrlHtmlWebpackPlugin()
]
}
The order is important - the plugin must come after HtmlWebpackPlugin.
Consider the following HTML template:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Example</title>
<link type="text/css" rel="stylesheet" href="css/index.css" />
<script async="async" src="js/bundle.js"></script>
</head>
<body>
...
</body>
</html>
If webpack is configured to generate the bundle with a hash included, then the URLs for both <script>
and <link>
will be replaced:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Example</title>
<link type="text/css" rel="stylesheet" href="css/index.abcdef0123456789.css" />
<script async="async" src="js/bundle.abcdef0123456789.js"></script>
</head>
<body>
...
</body>
</html>