详解webpack自动生成html页面

发布时间 - 2026-01-11 02:07:04    点击率:

在项目中我们会不断的添加,优化代码,每次添加优化之后都需要打包进行再次上传更新。这时问题就回来了,每次打包出来js,css文件的名字都是一样的,在首页index.html的引用也不会变,这样老用户在访问这个页面时看到就会是浏览器缓存的版本,而不是最新的版本,想要看到最新版本还要进行清缓存,强制刷新,这显然是不可能的,那我们要如何解决这个问题呢?

首先有同学可能想到每次打包之后我改一下打包出来文件的名字,然后在首页index,html里面把引用代码里的文件名字也改掉就可以了,这种方法是可以的,但是每次都要改这么多,显然会很耗费时间,而且人工手动修改很可能也会带来bug。又有一位同学可能会说,不用那么麻烦,直接在上线前,在css,js资源引用的后面加一个随机数就可以了。这种方法虽然比第一种方法简单了许多,但是还是没有解决之前的问题。那么我们能不能实现每次打包完直接生成的文件后面加上一个随机字符串,然后首页里的引用也一起自动变成最新打包的文件呢?答案是可以的,接下来我将讲一下利用webpack实现

webpack实现这个功能,首先要下载一个webpack的插件html-webpack-plugin

npm install html-webpack-plugin 

接下来要在羡慕里新建一个文件,这个文件就是我们要生成的首页文件的模板

//template.js
module.exports = function (templateParams) {
 return (
  `<!DOCTYPE html>
  <html>
  <head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title> ${templateParams.htmlWebpackPlugin.options.title} </title>
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
  <meta name="author" content=""/>
  <meta name="keywords" content="">
  <meta name="description" content="">
  <meta name="HandheldFriendly" content="true">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta http-equiv="Cache-Control" content="no-transform">
  <meta http-equiv="Cache-Control" content="no-siteapp">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="default">
  <!--other: default, black, black-translucent-->
  <meta name="format-detection" content="telephone=no">
  </head>
  <script>
   function hasToken() {
    var result = /ztoken/g.test(document.cookie) && !(document.cookie.split('ztoken=')[1].split(';')[0] === '');
    return result
   }
   function clearCookieAll() {
    var keys = document.cookie.match(/[^ =;]+(?=\=)/g);
    if (keys) {
     for (var i = keys.length; i--;)
      document.cookie = keys[i] + '=0;expires=' + new Date(0).toUTCString()
    }
   }
   if (!hasToken()) {
    console.warn('无效token')
    clearCookieAll()
    window.location.href = '/index.html'
   }
  </script>
  <body>
  <div id="root" style="height:100%"></div>
  <!--<div>development mode</div>-->
  </body>
  </html>`
 )
}

准备工作做好了,接下来就是进行配置了

//首先引入插件
var HtmlWebpackPlugin = require('html-webpack-plugin');

界限来在配置webpack的plugins选项

plugins: [
 new HtmlWebpackPlugin({            //根据模板插入css/js等生成最终HTML
       // favicon:'./src/img/favicon.ico', //favicon路径
       filename:'src/index.html',  //生成的html存放路径,相对于 path
       template:'./src/app/template/template.js',  //html模板路径
       title: '升级空间运营后台',
       cache: true,
       inject:true,  //允许插件修改哪些内容,包括head与body
       hash:true,  //为静态资源生成hash值
       minify:{  //压缩HTML文件
         removeComments:true,  //移除HTML中的注释
          collapseWhitespace:false  //删除空白符与换行符
       }
    })
],

执行打包命令后,你会发现生成自动生了HTML代码,在index,html资源引用的地方会在资源后面自动生成一串hash值,这样每次更新之后用户就会自动获取最新资源了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# webpack自动生成html  # webpack  # 生成html  # 首页  # 就会  # 就可以  # 来了  # 随机数  # 这种方法  # 也会  # 都要  # 这么多  # 又有  # 会在  # 要在  # 很可能  # 我将  # 会说  # 种方法  # 会很  # 生了  # 相对于  # 准备工作 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JavaScript中的标签模板是什么_它如何扩展字符串功能  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel如何创建自定义中间件?(Middleware代码示例)  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  教你用AI将一段旋律扩展成一首完整的曲子  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Laravel怎么清理缓存_Laravel optimize clear命令详解  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  网站制作企业,网站的banner和导航栏是指什么?  nodejs redis 发布订阅机制封装实现方法及实例代码  香港服务器部署网站为何提示未备案?  Laravel安装步骤详细教程_Laravel环境搭建指南  如何在阿里云香港服务器快速搭建网站?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel如何处理CORS跨域请求?(配置示例)  Python制作简易注册登录系统  详解阿里云nginx服务器多站点的配置  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Java类加载基本过程详细介绍  javascript中闭包概念与用法深入理解  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  创业网站制作流程,创业网站可靠吗?  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何基于PHP生成高效IDC网络公司建站源码?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  如何快速搭建高效可靠的建站解决方案?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  如何选择可靠的免备案建站服务器?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Android实现代码画虚线边框背景效果  如何快速搭建自助建站会员专属系统?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  佛山企业网站制作公司有哪些,沟通100网上服务官网?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  常州企业网站制作公司,全国继续教育网怎么登录?