首页IT科技htmlwebpackplugin有什么用(Webpack:HTML Webpack Plugin插件)

htmlwebpackplugin有什么用(Webpack:HTML Webpack Plugin插件)

时间2025-06-14 15:56:45分类IT科技浏览8415
导读: HTML Webpack Plugin插件,在Webpack构建的前端项目中,用于简化index.html文件的创建,以免除项目打包之后手动创建/拷贝index.html到打包目录下的繁琐步骤。以下,从一个已构建好的Vue项目中的一个现象谈起,逐步深入了解此插件的使用。...

        HTML Webpack Plugin插件               ,在Webpack构建的前端项目中                      ,用于简化index.html文件的创建       ,以免除项目打包之后手动创建/拷贝index.html到打包目录下的繁琐步骤              。以下       ,从一个已构建好的Vue项目中的一个现象谈起                      ,逐步深入了解此插件的使用                      。

目录

从Vue项目中的index.html谈起

Webpack:引入HTML Webpack Plugin插件

Webpack:自动导入脚本与项目打包问题

HTML Webpack Plugin插件的其它配置

 title标题

 filename文件名

 template文件模板来源

 templateContent自定义模板属性

 templateParameters模板参数属性

​ publicPath属性

 scriptLoading脚本加载方式属性

 favicon图标属性

 mate属性

 minify属性

 hash哈希属性

 showErrors属性

从Vue项目中的index.html谈起

        当我们使用vue-cli构建Vue前端应用时              ,所生成的index.html基本内容如下        。

<!DOCTYPE html> <html lang=""> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <title><%= htmlWebpackPlugin.options.title %></title> </head> <body> <noscript> <strong>Were sorry but <%= htmlWebpackPlugin.options.title %> doesnt work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <div id="app"></div> <!-- built files will be auto injected --> </body> </html>

        请仔细观察以上的代码结构       ,标准的html页面骨架模板                      ,body中包含一个用于挂载Vue实例的id选择器值为app的DOM元素              。除此之外              ,没有任何JavaScript脚本的引入                     。

        我们再看一个打包之后,位于输出目录下的index.html文件                      ,内容如下                     ,

<!DOCTYPE html> <html lang=""> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="icon" href="favicon.ico"> <title>cesium-viewer</title> <link href="js/about.b241abde.js" rel="prefetch"> <link href="css/chunk-vendors.b7dbb5dd.css" rel="preload" as="style"> <link href="css/index.d52c5618.css" rel="preload" as="style"> <link href="js/chunk-vendors.b8df0be2.js" rel="preload" as="script"> <link href="js/index.224fd61e.js" rel="preload" as="script"> <link href="css/chunk-vendors.b7dbb5dd.css" rel="stylesheet"> <link href="css/index.d52c5618.css" rel="stylesheet"> </head> <body><noscript><strong>Were sorry but cesium-viewer doesnt work properly without JavaScript enabled. Please enable it to continue.</strong></noscript> <div id="app"></div> <script src="js/chunk-vendors.b8df0be2.js"></script> <script src="js/index.224fd61e.js"></script> </body> </html>

        可以看到,打包之后自动生成的HTML文件中               ,自动为我们引入了两个script标签                     ,用于链接打包生成的JavaScript脚本文件        。看到这里       ,你可能很自然的联想到开头部分我们提到的HTML Webpack Plugin插件               ,因为该插件也具备这样的能力                      ,这也是我们接下来想要聊的内容       。

Webpack:引入HTML Webpack Plugin插件

        HTML Webpack Plugin插件的GitHub官网地址为:https://github.com/jantimon/html-webpack-plugin       ,介绍也很简洁:Plugin that simplifies creation of HTML files to serve your bundles(一个服务于bundles的               、用于简化HTML文件生成的插件)                     。

        要想在Webpack项目中引入该插件       ,首先要注意当前项目的Webpack版本                      ,这一点可以从package.json文件中进行查看              ,如下图所示       ,我的这里是webpack 5.x版本的               。

         参考官网的介绍                      ,使用Webpack5对应的命令进行安装       。

# Webpack 5 npm i --save-dev html-webpack-plugin yarn add --dev html-webpack-plugin # Webpack 4 npm i --save-dev html-webpack-plugin@4 yarn add --dev html-webpack-plugin@4

        虽然官网介绍此插件是零配置的              ,但是为了和我们的Webpack项目兼容,还是需要修改Webpack项目的配置文件                      ,引入插件即可                     ,如下所示,

const path = require(path) const HtmlWebpackPlugin = require(html-webpack-plugin) //引入html-webpack-plugin 插件 ... module.exports = { ... plugins:[ new HtmlWebpackPlugin({ filename: `index.html`, //生成的文件名 template: path.resolve(__dirname, `src/index.html`), //源文件的绝对路径 }), ] ... }

Webpack:自动导入脚本与项目打包问题

        在引入HTML Webpack Plugin插件之后               ,再进行项目的打包操作                     ,该插件就会自动为我们生成index.html文件       ,文件内容如下               ,

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>webpack-demo</title> <script src="index.js"></script> <script defer="defer" src="index.js"></script> </head> <body> <div id="app"></div><input placeholder="input..."> <span class="iconfont">󰀒</span> <ul> <li>这是第1个li</li> <li>这是第2个li</li> <li>这是第3个li</li> <li>这是第4个li</li> <li>这是第5个li</li> <li>这是第6个li</li> </ul> <div id="box"></div> </body> </html>

Tips:script标签中的defer=defer属性表示:告诉浏览器应当立即下载/引入外部的JavaScript脚本文件                      ,但是应当推迟到整个HTML页面解析完毕之后才开始执行                     。注意       ,defer属性只对外部的脚本文件才有效               。

         为了进行比对       ,我们看一下原始的文件内容(如下)                      ,

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>webpack-demo</title> <!-- <script src="./index.js"></script> --> <!-- <script src="../dist/main.bundle.js"></script> --> <script src="index.js"></script> </head> <body> <div id="app"></div> <input type="text" placeholder="input..."> <span class="iconfont">󰀒</span> <ul> <li>这是第1个li</li> <li>这是第2个li</li> <li>这是第3个li</li> <li>这是第4个li</li> <li>这是第5个li</li> <li>这是第6个li</li> </ul> <div id="box"></div> </body> </html>

        可以看到              ,和Vue项目打包之后的类似       ,HTML Webpack Plugin步进为我们生成了index.html文件                      ,而在还自动在文件中引入了打包之后的"index.js"入口文件。

        我们尝试将其部署在Tomcat服务器下              ,

         接着,启动Tomcat服务器                      ,并访问/webpack-demo前端项目                     ,打开开发者工具面板,

         似乎是出现了一些问题               ,就是我们的console.log语句被打印了两次                     。

        这是为什么呢?我们回放打包之后的代码片段                     ,发现index.js入口文件被引入了两次       ,其中:第一个script标签是我们在最初构建项目时               ,手动引入的;第二个script标签是HTML Webpack Plugin插件自动引入的                      。但是                      ,这两个script标签都指向index.js入口文件。这也是导致执行两次的原因              。

       其实       ,这一点在HTML Webpack Plugin的GitHub页面中也有所提及       ,截图如下                      ,即:该插件会自动生成带有script标签的HTML文件                      。

        所以              ,为了解决这个问题       ,我们需要将源index.html文件中的语句注释掉                      ,然后重新打包        。

         打包之后              ,我们重新部署,查看执行次数              。确实只执行了一次                      ,问题解决                     。

 HTML Webpack Plugin插件的其它配置

        我们继续查看HTML Webpack Plugin插件的GitHub页面                     ,了解一下其它的配置项        。

title标题

        title配置项可以为插件生成的HTML页面配置标题内容       。

        示例如下,

 filename文件名

        filename属性               ,可以用于配置生成的HTML文件的文件名                     ,默认为:index.html

 template文件模板来源

        template属性       ,为其指定一个路径(相对路径/绝对路径均可)                     。可以用于配置根据哪一个HTML文件来生成打包输出时的HTML文件               。

 templateContent自定义模板属性

        templateContent属性               ,用于替换template属性                      ,使其失效       ,转为使用templateContent属性指定的模板内容       。

         使用示例如下       ,

 templateParameters模板参数属性

        templateParameters属性                      ,用于为自定义的templateContent模板源中的参数名              ,指定参数值                     。就类似于一开始为生成的HTML文件指定title标题属性的操作       ,是一样的               。

        使用示例如下                      ,

publicPath属性

        此属性用于为HTML中的script和link标签指定父级路径              ,建议使用默值auto。

 scriptLoading脚本加载方式属性

        scriptLoading属性,用于指定scirpt脚本的加载方式                      ,默认使用defer非阻塞的加载方式                     。

 favicon图标属性

        favicon属性                     ,用于给页面配置图标                      。

         例如,我们要给Webpack搭建起来的Vue项目配置一个Vue的图标               ,配置如下                     ,

new HtmlWebpackPlugin({ title: `Webpack-Demo`, //标题 filename: `index.html`, //生成的文件名 template: path.resolve(__dirname, `src/index.html`), //源文件的绝对路径 scriptLoading: defer, //以非阻塞的方式加载script脚本 favicon: path.resolve(__dirname, `src/favicon.ico`), //配置网站图标 }),

mate属性

        用于配置HTML页面的meta属性       ,对应Object对象类型。默认是一个空对象              。

         以下是默认的meta属性               ,

         以下是配置后的meta属性                      ,

 minify属性

        minify属性       ,常用于项目打包时的资源文件压缩操作                      。

 hash哈希属性

         配置之后       ,打包出来的外部资源会默认加上一段字符码        。

showErrors属性

        该属性控制                      ,是否可将错误的详细信息一一个可关闭的面板形式显示到HTML页面中              。默认开启                     。

         效果如下              ,

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
如何把主机的文件拷贝到另一台电脑上面(主机文件夹怎么导出来?) 网站如何优化排名好(如何做优化网站排名)