详解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 相关文章推荐
(function(){})()的用法与优点
Mar 11 Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
IE6-8中Date不支持toISOString的修复方法
May 04 Javascript
JavaScript实现九九乘法表的简单实例
Jun 07 Javascript
浅析JSONP技术原理及实现
Jun 08 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
Aug 15 Javascript
jQuery简单实现列表隐藏和显示效果示例
Sep 12 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
Aug 18 Javascript
vue使用keep-alive实现数据缓存不刷新
Oct 21 Javascript
vue 解决form表单提交但不跳转页面的问题
Oct 30 Javascript
关于javascript中的promise的用法和注意事项(推荐)
Jan 15 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
mac下安装nginx和php
2013/11/04 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
IE 下的只读 innerHTML
2009/08/21 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
Javascript中的默认参数详解
2014/10/22 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
深入理解HTML5定时器requestAnimationFrame的使用
2018/12/12 HTML / CSS
护士求职推荐信范文
2013/11/23 职场文书
继承公证书格式
2015/01/26 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
人事任命通知
2015/04/20 职场文书
目标责任书格式范文
2015/05/11 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers
世界十大儿童漫画书排名,法国国宝漫画排第五,第二是轰动日本连环
2022/03/18 欧美动漫