详解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网页侧边随页面滚动广告效果实现
Apr 14 Javascript
jquery实现先淡出再折叠收起的动画效果
Aug 07 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
Dec 01 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
May 03 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
AngularJS中的JSONP实例解析
Dec 01 Javascript
微信公众号 摇一摇周边功能开发
Dec 08 Javascript
学习使用jQuery表单验证插件和日历插件
Feb 13 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
May 12 Javascript
js实现简易聊天对话框
Aug 17 Javascript
使用JQ完成表格隔行换色的简单实例
Aug 25 Javascript
JS实现DOM删除节点操作示例
Apr 04 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 获取全局变量的代码
2011/04/21 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
php mysql 封装类实例代码
2016/09/18 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
详解python上传文件和字符到PHP服务器
2017/11/24 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
2019/07/11 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
Keras搭建自编码器操作
2020/07/03 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
酒店管理专业学生求职信
2013/09/27 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
保护环境建议书
2014/03/12 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
介绍信样本
2015/01/31 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript