详解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 相关文章推荐
通过Jquery遍历Json的两种数据结构的实现代码
Jan 19 Javascript
js实现文本框中焦点在最后位置
Mar 04 Javascript
纯javascript模仿微信打飞机小游戏
Aug 20 Javascript
深入理解Ajax的get和post请求
Jun 02 Javascript
js实现小窗口拖拽效果
Dec 03 Javascript
localStorage的黑科技-js和css缓存机制
Feb 06 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
Dec 11 jQuery
浅谈js获取ModelAndView值的问题
Mar 28 Javascript
vue-cli3.0 环境变量与模式配置方法
Nov 08 Javascript
如何在微信小程序中实现Mixins方案
Jun 20 Javascript
js实现百度淘宝搜索功能
Feb 17 Javascript
让Vue响应Map或Set的变化操作
Nov 11 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
php通过ajax实现双击table修改内容
2014/04/28 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
PHP反射学习入门示例
2019/06/14 PHP
jquery之empty()与remove()区别说明
2010/09/10 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
详解Python发送email的三种方式
2018/10/18 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
python 实现简单的FTP程序
2019/12/27 Python
python如何获取apk的packagename和activity
2020/01/10 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
营销主管自我评价怎么写
2013/09/19 职场文书
应届毕业生求职信范例分享
2013/12/17 职场文书
表决心的诗句大全
2014/03/11 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
银行竞聘报告范文
2014/11/06 职场文书
先进个人材料怎么写
2014/12/30 职场文书
2015年中个人总结范文
2015/03/10 职场文书