详解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添加重载函数的辅助方法
Jul 04 Javascript
js截取中英文字符串、标点符号无乱码示例解读
Apr 17 Javascript
js检测输入内容全为空格的方法
May 03 Javascript
javascript跑马灯抽奖实例讲解
Apr 17 Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 Javascript
Bootstrap学习笔记 轮播(Carousel)插件
Mar 21 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
Jul 07 Javascript
什么是Vue.js框架 为什么选择它?
Oct 17 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
node crawler如何添加promise支持
Feb 01 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
Sep 22 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
PHP中phar包的使用教程
2017/06/14 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
2019/06/05 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
原生js实现日历效果
2020/03/02 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
Python实现感知机(PLA)算法
2017/12/20 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
Python中捕获键盘的方式详解
2019/03/28 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
贫困证明模板(3篇)
2014/09/16 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书