Skip to content

BTOdell/replace-url-html-webpack-plugin

Repository files navigation

URL replacement for HTML Webpack Plugin

Build Status npm npm dependencies node npm type definitions npm license

NPM

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)

Environment

Peer Dependencies

Installation

Install the plugin as a development dependency using npm:

$ npm install replace-url-html-webpack-plugin --save-dev

Basic Usage

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.

Example

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>