HTML Loader
Exports HTML as string. HTML is minimized when the compiler demands.
Install
npm i -D html-loader
Usage
By default every local <img src="image.png">
is required (require('./image.png')
). You may need to specify loaders for images in your configuration (recommended file-loader
or url-loader
).
You can specify which tag-attribute combination should be processed by this loader via the query parameter attrs
. Pass an array or a space-separated list of <tag>:<attribute>
combinations. (Default: attrs=img:src
)
To completely disable tag-attribute processing (for instance, if you're handling image loading on the client side) you can pass in attrs=false
.
Examples
With this configuration:
{
module: {
loaders: [
{ test: /\.jpg$/, loader: "file-loader" },
{ test: /\.png$/, loader: "url-loader?mimetype=image/png" }
]
},
output: {
publicPath: "http://cdn.example.com/[hash]/"
}
}
<img src="image.png" data-src="image2x.png" >
require("html!./file.html");
require("html?attrs=img:data-src!./file.html");
require("html?attrs=img:src img:data-src!./file.html");
require("html?attrs[]=img:src&attrs[]=img:data-src!./file.html");
require("html?-attrs!./file.html");
minimized by running webpack --optimize-minimize
'<img src=http://cdn.example.com/49eba9f/a9f92ca.jpg
data-src=data:image/png;base64,...>'
'Root-relative' URLs
For urls that start with a /
, the default behavior is to not translate them.
If a root
query parameter is set, however, it will be prepended to the url
and then translated.
With the same configuration as above:
<img src="/image.jpg">
require("html!./file.html");
require("html?root=.!./file.html");
Interpolation
You can use interpolate
flag to enable interpolation syntax for ES6 template strings, like so:
require("html?interpolate!./file.html");
<img src="${require(`./images/gallery.png`)}">
<div>${require('./components/gallery.html')}</div>
And if you only want to use require
in template and any other ${}
are not to be translate you can set interpolate
flag to require
, like so:
require("html?interpolate=require!./file.ftl");
<#list list as list>
<a href="${list.href!}" />${list.name}</a>
</#list>
<img src="${require(`./images/gallery.png`)}">
<div>${require('./components/gallery.html')}</div>
Advanced options
If you need to pass more advanced options, especially those which cannot be stringified, you can also define an htmlLoader
-property on your webpack.config.js
:
var path = require('path')
module.exports = {
...
module: {
loaders: [
{
test: /\.html$/,
loader: "html"
}
]
}
htmlLoader: {
ignoreCustomFragments: [/\{\{.*?}}/],
root: path.resolve(__dirname, 'assets'),
attrs: ['img:src', 'link:href']
}
};
If you need to define two different loader configs, you can also change the config's property name via html?config=otherHtmlLoaderConfig
:
module.exports = {
...
module: {
loaders: [
{
test: /\.html$/,
loader: "html?config=otherHtmlLoaderConfig"
}
]
}
otherHtmlLoaderConfig: {
...
}
};
Maintainers
LICENSE
MIT
http://www.opensource.org/licenses/mit-license.php
Copyright (c) 2016 Tobias Koppers @sokra
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.