html-loader

Exports HTML as string. HTML is minimized when the compiler demands.

安装

  1. npm i -D html-loader

用法

默认情况下,每个本地的 <img src="image.png"> 都需要通过 require (require('./image.png'))来进行加载。你可能需要在配置中为图片指定 loader(推荐 file-loaderurl-loader

你可以通过查询参数 attrs,来指定哪个标签属性组合(tag-attribute combination)应该被此 loader 处理。传递数组或以空格分隔的 <tag>:<attribute> 组合的列表。(默认值:attrs=img:src

If you use <custom-elements>, and lots of them make use of a custom-src attribute, you don’t have to specify each combination <tag>:<attribute>: just specify an empty tag like attrs=:custom-src and it will match every element.

  1. {
  2. test: /\.(html)$/,
  3. use: {
  4. loader: 'html-loader',
  5. options: {
  6. attrs: [':data-src']
  7. }
  8. }
  9. }

要完全禁用对标签属性的处理(例如,如果你在客户端处理图片加载),你可以传入 attrs=false

示例

使用此配置:

  1. {
  2. module: {
  3. rules: [
  4. { test: /\.jpg$/, use: [ "file-loader" ] },
  5. { test: /\.png$/, use: [ "url-loader?mimetype=image/png" ] }
  6. ]
  7. },
  8. output: {
  9. publicPath: "http://cdn.example.com/[hash]/"
  10. }
  11. }
  1. <!-- file.html -->
  2. <img src="image.png" data-src="image2x.png" >
  1. require("html-loader!./file.html");
  2. // => '<img src="http://cdn.example.com/49eba9f/a992ca.png"
  3. // data-src="image2x.png">'
  1. require("html-loader?attrs=img:data-src!./file.html");
  2. // => '<img src="image.png" data-src="data:image/png;base64,..." >'
  1. require("html-loader?attrs=img:src img:data-src!./file.html");
  2. require("html-loader?attrs[]=img:src&attrs[]=img:data-src!./file.html");
  3. // => '<img src="http://cdn.example.com/49eba9f/a992ca.png"
  4. // data-src="data:image/png;base64,..." >'
  1. require("html-loader?-attrs!./file.html");
  2. // => '<img src="image.jpg" data-src="image2x.png" >'

通过运行 webpack --optimize-minimize 来最小化

  1. '<img src=http://cdn.example.com/49eba9f/a9f92ca.jpg
  2. data-src=data:image/png;base64,...>'

或者在 webpack.conf.js 的 rule 选项中指定 minimize 属性

  1. module: {
  2. rules: [{
  3. test: /\.html$/,
  4. use: [ {
  5. loader: 'html-loader',
  6. options: {
  7. minimize: true
  8. }
  9. }],
  10. }]
  11. }

See html-minifier‘s documentation for more information on the available options.

The enabled rules for minimizing by default are the following ones:

  • removeComments
  • removeCommentsFromCDATA
  • removeCDATASectionsFromCDATA
  • collapseWhitespace
  • conservativeCollapse
  • removeAttributeQuotes
  • useShortDoctype
  • keepClosingSlash
  • minifyJS
  • minifyCSS
  • removeScriptTypeAttributes
  • removeStyleTypeAttributes

    The rules can be disabled using the following options in your webpack.conf.js

  1. module: {
  2. rules: [{
  3. test: /\.html$/,
  4. use: [ {
  5. loader: 'html-loader',
  6. options: {
  7. minimize: true,
  8. removeComments: false,
  9. collapseWhitespace: false
  10. }
  11. }],
  12. }]
  13. }

#

对于以 / 开头的 url,默认行为是不转换它们。 如果设置了 root 查询参数,它将被添加到 URL 之前,然后进行转换。

和上面配置相同:

  1. <img src="/image.jpg">
  1. require("html-loader!./file.html");
  2. // => '<img src="/image.jpg">'
  1. require("html-loader?root=.!./file.html");
  2. // => '<img src="http://cdn.example.com/49eba9f/a992ca.jpg">'

插值

你可以使用 interpolate 标记,为 ES6 模板字符串启用插值语法,就像这样:

  1. require("html-loader?interpolate!./file.html");
  1. <img src="${require(`./images/gallery.png`)}">
  2. <div>${require('./components/gallery.html')}</div>

如果你只想在模板中使用 require,任何其它的 ${} 不被转换,你可以设置 interpolate 标记为 require,就像这样:

  1. require("html-loader?interpolate=require!./file.ftl");
  1. <#list list as list>
  2. <a href="${list.href!}" />${list.name}</a>
  3. </#list>
  4. <img src="${require(`./images/gallery.png`)}">
  5. <div>${require('./components/gallery.html')}</div>

导出格式

这里有几种不同的可用导出格式:

  • module.exports(默认配置,cjs 格式)。”Hello world” 转为 module.exports = "Hello world";
  • exports.default (当设置了 exportAsDefault 参数,es6to5 格式)。”Hello world” 转为 exports.default = "Hello world";
  • export default (当设置了 exportAsEs6Default 参数,es6 格式)。”Hello world” 转为 export default "Hello world";

高级选项

如果你需要传递更多高级选项,特别是那些不能被字符串化,你还可以在 webpack.config.js 中定义一个 htmlLoader 属性:

  1. var path = require('path')
  2. module.exports = {
  3. ...
  4. module: {
  5. rules: [
  6. {
  7. test: /\.html$/,
  8. use: [ "html-loader" ]
  9. }
  10. ]
  11. },
  12. htmlLoader: {
  13. ignoreCustomFragments: [/\{\{.*?}}/],
  14. root: path.resolve(__dirname, 'assets'),
  15. attrs: ['img:src', 'link:href']
  16. }
  17. };

如果你需要定义两个不同的 loader 配置,你也可以通过 html-loader?config=otherHtmlLoaderConfig 改变配置的属性名:

  1. module.exports = {
  2. ...
  3. module: {
  4. rules: [
  5. {
  6. test: /\.html$/,
  7. use: [ "html-loader?config=otherHtmlLoaderConfig" ]
  8. }
  9. ]
  10. },
  11. otherHtmlLoaderConfig: {
  12. ...
  13. }
  14. };

导出到 HTML 文件

一个很常见的场景,将 HTML 导出到 .html 文件中,直接访问它们,而不是使用 javascript 注入。这可以通过3个 loader 的组合来实现:

html-loader 将解析 URL,并请求图片和你所期望的一切资源。extract-loader 会将 javascript 解析为合适的 html 文件,确保引用的图片指向正确的路径,file-loader 将结果写入 .html 文件。示例:

  1. {
  2. test: /\.html$/,
  3. use: ['file-loader?name=[name].[ext]', 'extract-loader', 'html-loader'],
  4. }

维护人员

html-loader - 图1


Hemanth

html-loader - 图2


Joshua Wiens

html-loader - 图3


Michael Ciniawsky

html-loader - 图4


Imvetri

html-loader - 图5


Andrei Crnković

html-loader - 图6


Yuta Hiroto

html-loader - 图7


Vesselin Petrunov

html-loader - 图8


Gajus Kuizinas