详解webpack自动生成html页面


Posted in Javascript onJune 29, 2017

在项目中我们会不断的添加,优化代码,每次添加优化之后都需要打包进行再次上传更新。这时问题就回来了,每次打包出来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值,这样每次更新之后用户就会自动获取最新资源了。

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

Javascript 相关文章推荐
textarea的value是html文件源代码,存成html文件的代码
Apr 20 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
使用jquery写个更改表格行顺序的小功能
Apr 29 Javascript
jQuery通过Ajax返回JSON数据
Apr 28 Javascript
详解Javascript中的Object对象
Feb 28 Javascript
jQuery中事件与动画的总结分享
May 24 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
angularjs实现上拉加载和下拉刷新数据功能
Jun 12 Javascript
vue双向数据绑定知识点总结
Apr 18 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
Sep 19 Javascript
node Buffer缓存区常见操作示例
May 04 Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 #Javascript
详解webpack分包及异步加载套路
Jun 29 #Javascript
JavaScript之map reduce_动力节点Java学院整理
Jun 29 #Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
Jun 29 #Javascript
JavaScript之iterable_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之Map和Set_动力节点Java学院整理
Jun 29 #Javascript
JavaScript之面向对象_动力节点Java学院整理
Jun 29 #Javascript
You might like
ip签名探针
2006/10/09 PHP
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
Angular4表单验证代码详解
2017/09/03 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
2018/02/24 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python中文编码那些事
2014/06/25 Python
Request的中断和ErrorHandler实例解析
2018/02/12 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
Python中的元组介绍
2019/01/28 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
python实现简单遗传算法
2020/09/18 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
护理专业学生的求职信范文
2013/12/11 职场文书
平面设计求职信
2014/03/10 职场文书
医疗纠纷协议书
2014/04/16 职场文书
道德模范事迹材料
2014/12/20 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python