详解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 相关文章推荐
js 图片等比例缩放代码
May 13 Javascript
jquery通过closest选择器修改上级元素的方法
Mar 17 Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
react.js 翻页插件实例代码
Jan 19 Javascript
Vue框架之goods组件开发详解
Jan 25 Javascript
vue中锚点的三种方法
Jul 06 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
Nov 10 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
Nov 10 Javascript
vue-cli3跨域配置的简单方法
Sep 06 Javascript
JavaScript构造函数原理及实现流程解析
Nov 19 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
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
2013/10/10 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
jquery使用$(element).is()来判断获取的tagName
2014/08/24 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
jQuery实现动态文字搜索功能
2017/01/05 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
python创建线程示例
2014/05/06 Python
Python读写unicode文件的方法
2015/07/10 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
大学生预备党员自我评价分享
2013/11/16 职场文书
全国道德模范事迹
2014/02/01 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
营运督导岗位职责
2015/04/10 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
javascript Number 与 Math对象的介绍
2021/11/17 Javascript