美文网首页
webpack处理文件内容——编写html-webpack-pl

webpack处理文件内容——编写html-webpack-pl

作者: 景阳冈大虫在此 | 来源:发表于2020-11-05 21:07 被阅读0次

    目标

    希望能在html文件里用prefetch预先下载资源,提升下一页的性能。

    前言

    <link rel="prefetch" href="XXX"></link>
    
    • 平时用到vue-cli构建项目时,脚手架会将当前的资源放到<head>标签里用preload去提前下载。而这次我希望页面能提前下载下一页的资源,提升下一页的性能。
    • prefetch将会在浏览器空闲时间下载资源,且不阻塞页面渲染。

    配置

    • 功能
      名称叫injectHtmlPlugin,可以接收ManifestPlugin插件生成的对象,然后预加载里面的资源。
    • 编写思路
      在html模板里写上here占个位置,然后用replace替换这一段。
    • webpack.config.js
      html-webpack-plugin的插件在plugin里要写在他后面。
    const manifest = require('./dist/manifest.json');
    
    plugins: [
        new ManifestPlugin(),
        new HtmlWebpackPlugin({
             template: './src/index.html',
        }),
        new injectHtmlPlugin(manifest),
    ],
    
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    class injectHtmlPlugin {
        constructor(options) {
            this.insertInfo = options;
        }
        apply(compiler) {
            const insertInfo = this.insertInfo;
            compiler.hooks.compilation.tap('injectHtmlPlugin', (compilation) => {
                HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync('injectHtmlPlugin', (htmlPluginData, cb) => {
                    // Manipulate the content
                    var str = '';
                    for (let key in insertInfo) {
                        str += `<link rel="prefetch" href="${insertInfo[key]}" ></link>`;
                    }
                    var temp = htmlPluginData.html;
                    temp = temp.replace(/<!--here-->/, str);
                    htmlPluginData.html = temp;
                    // Tell webpack to move on
                    cb(null, htmlPluginData);
                });
            });
        }
    }
    module.exports = injectHtmlPlugin;
    
    • html模板
    <!DOCTYPE html>
    <html>
        <head>
            <title>dear webpack</title>
            here
        </head>
        <body>
            hi
        </body>
    </html>
    

    效果


    相关文章

      网友评论

          本文标题:webpack处理文件内容——编写html-webpack-pl

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