详解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 相关文章推荐
javascript 获取表单file全路径
Dec 31 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
Aug 03 Javascript
jQuery中调用WebService方法小结
Mar 28 Javascript
Jquery实现的角色左右选择特效
May 21 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
Jun 05 Javascript
javascript获取wx.config内部字段解决微信分享
Mar 09 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
浅谈Angular的$q, defer, promise
Dec 20 Javascript
JS+Canvas绘制动态时钟效果
Nov 10 Javascript
详解Vue.js中.native修饰符
Apr 24 Javascript
JS原生瀑布流效果实现
Apr 26 Javascript
微信小程序点击保存图片到本机功能
Dec 13 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
使用xampp搭建运行php虚拟主机的详细步骤
2015/10/21 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
JavaScript 字符串乘法
2009/08/20 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
Python网络编程详解
2017/10/31 Python
Python2实现的图片文本识别功能详解
2018/07/11 Python
python 多线程串行和并行的实例
2019/02/22 Python
python的turtle库使用详解
2019/05/10 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
tensorflow之并行读入数据详解
2020/02/05 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
银行工作检查书范文
2014/01/31 职场文书
超市重阳节活动方案
2014/02/10 职场文书
安全生产月标语
2014/10/07 职场文书
国庆横幅标语
2014/10/08 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
门卫岗位职责
2015/02/09 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python