美文网首页
[插件1] html-webpack-plugin

[插件1] html-webpack-plugin

作者: JamesSawyer | 来源:发表于2018-07-09 22:49 被阅读122次

    这个插件用于简化HTML文件的创建,服务于webpack bundles.这对文件名使用hash的打包特别有用。可以用这个插件产生HTML,也可以使用自己的模版。

    plugins

    这个插件提供了钩子用来扩展需求,下面是一些社区提供的现成的扩展:

    用法

    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const path = require('path');
    
    module.exports = {
      entry: 'index.js',
      output: {
        path: path.resolve(__dirname, '/dist'),
        filename: 'index_bundle.js',
      },
      plugins: [
        new HtmlWebpackPlugin(),
      ],
    }
    

    这个配置会生成下面文件 dist/index.html:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title>Webpack App</title>
      </head>
      <body>
        <script src="index_bundle.js"></script>
      </body>
    </html>
    

    webpack产生的CSS资源,比如使用ExtractTextPlugin 提取的CSS会放在html head的 <link> 标签中

    配置选项

    如果在配置选项中传递hash

    属性名 类型 默认值 描述
    title {string} Webpack App 产生html的title
    filename {string} 'index.html' 生成的html文件默认是'index.html' 也可以指定一个子路径(比如 'assets/admin.html')
    template {string} `` 模版的路径
    templateParameters {bool | object|function} `` 允许overwrite模版中的参数
    inject {bool|string} true true | 'head' | 'body' | false 将所有的资源插入到给定的template或者templateContent中。当值为 true || 'body', 所有的js资源将插入的body的最下面。 'head'将scripts放在head中
    favicon {string} `` 添加给定的favicon 路径
    meta {object} {} 允许插入 meta 标签,比如 meta: {viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no'}
    minify {bool | object} false 传递 html-minifier配置对象用来压缩产生的html文件
    hash {bool} false 如果为true,这会给所有的scripts和css文件添加一个独一无二的webpack编译hash值,这对清除缓存很有用
    cache {bool} true 只有文件发生变化时才生产新的文件
    showErrors {bool} true 如果写入html发生了错误,则显示错误
    chunks {any} ? 允许只添加部分chunks 比如只添加单元测试chunk
    chunksSortMode {string | function} auto 允许控制chunks在写入html之前如何被排序,值可能为: 'none' | 'auto' | 'dependency' | 'manual' | {function}
    excludeChunks {Array<string>} `` 允许跳过添加某些chunks,比如不添加单元测试chunk

    示例:

    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const path = require('path');
    
    module.exports = {
      entry: 'index.js',
      output: {
        path: path.resolve(__dirname, '/dist'),
        filename: 'index_bundle.js',
      },
      plugins: [
        new HtmlWebpackPlugin({
          title: 'My App',
          filename: 'assets/admin.html',
        }),
      ],
    }
    

    产生多个HTML文件

    多次声明这个插件即可以生成多个HTML文件

    {
      entry: 'index.js',
      output: {
        path: path.resolve(__dirname, '/dist'),
        filename: 'index_bundle.js',
      },
      plugins: [
        new HtmlWebpackPlugin(), // 产生默认的 index.html
        new HtmlWebpackPlugin({ // 产生 test.html
          title: 'My App',
          filename: 'test.html',
          template: 'src/assets/test.html'
        }),
      ],
    }
    

    自定义Templates

    如果默认产生的HTML不能满足我们的需求,这可以自定义模版,最简单的方式是,定义 template 字段,然后传入一个自定义的HTML文件,html-webpack-plugin 将自动的插入所有需要的CSS, JS ,manifest和favicon文件

    plugins: [
      new HtmlWebpackPlugin({
        title: 'custom template',
        // 加载自定义模版(默认使用loadsh加载)
        template: 'index.html'
      })
    ]
    

    自定义index.html

    <!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
        <title><%= htmlWebpackPlugin.options.title %></title>
      </head>
      <body>
      </body>
    </html>
    

    可以使用其它的loader加载其它模版,比如 pug, hbs,ejs等格式

    module: {
      loaders: [
        { test: '\.hbs$', loader: 'hanlebars-loader' }
      ]
    },
    plugins: [
      new HtmlWebpackPlugin({
        title: 'custom template using Handlebars',
        // 加载自定义模版(默认使用loadsh加载)
        template: 'index.hbs'
      })
    ]
    

    过滤chunks

    只包含我们想要的chunks

    plugins: [
      new HtmlWebpackPlugin({
        chunks: ['app']
      })
    ]
    

    可以使用 'excludeChunks' 排除不想要的chunks

    plugins: [
      new HtmlWebpackPlugin({
        excludeChunks: [ 'dev-helper' ]
      })
    ]
    

    相关文章

      网友评论

          本文标题:[插件1] html-webpack-plugin

          本文链接:https://www.haomeiwen.com/subject/gvdxpftx.html