详解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 相关文章推荐
Extjs Ext.MessageBox.confirm 确认对话框详解
Apr 02 Javascript
Javascript 面试题随笔
Mar 31 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 Javascript
动态获取复选框checkbox选中个数的jquery代码
Jun 25 Javascript
jQuery中bind与live的用法及区别小结
Jan 27 Javascript
JavaScript数组常用方法
Mar 02 Javascript
JavaScript中的DSL元编程介绍
Mar 15 Javascript
文字垂直滚动之javascript代码
Jul 29 Javascript
JS实现的手机端精简幻灯片效果
Sep 05 Javascript
JavaScript学习笔记--常用的互动方法
Dec 07 Javascript
vue props 一次传多个值实例
Jul 22 Javascript
基于JavaScript实现省市联动效果
Jun 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
PHP写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
解决pycharm无法调用pip安装的包问题
2018/05/18 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
python实现黑客字幕雨效果
2018/06/21 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
三星法国官方网站:Samsung法国
2019/10/31 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
生产车间主任的个人自我鉴定
2013/10/25 职场文书
总经理司机岗位职责
2014/02/06 职场文书
党员批评与自我批评
2014/02/12 职场文书
一句话工作感言
2014/03/01 职场文书
研发工程师岗位职责
2014/04/28 职场文书
员工保密协议书
2014/09/27 职场文书
基层党组织整改方案
2014/10/25 职场文书