纯前端版本号策略

摘要:
DOCTYPEHTML˃2345test678˂!

近日在做的一个全静态项目,没有任何服务器逻辑,所以版本号策略也采用了纯前端的解决方案.

说实在话,其实都是被逼的,我只要修改一下服务器配置加简单的逻辑判断就可以了,但是后端工程师懒的搞,觉着巨复杂.

说到版本号,其实涉及到版本号有三个问题要考虑:版本发布问题 缓存和版本回滚问题 切换开发和维护环境的问题

其实方案很简单,类似于svn的版本策略,也就是如果有任何文件修改的话,都会更新一个版本号

具体如下:

1 主html不缓存,加载资源的文件不缓存
2 涉及到版本号的资源加载放在单独的文件中
3 app内部的静态文件(js,css涉及到版本号策略),针对图片需要自己独立判断

说起来很复杂,但是用起来比较简单.这其中唯一用到的一个技术就是SSI(Server-Side Include).

具体分为下面2个步骤

第一步:修改加载资源的代码

示例如下:
index.html

1 <!DOCTYPE HTML>
2 <html lang=”en”>
3 <head>
4 <meta charset=”UTF-8″>
5 <title>test</title>
6 </head>
7 <body>
8 <!–#include file=”loadStaticFiles.inc” –>
9 </body>
10 </html>

loadStaticFiles.inc

1 <script type=”text/javascript”>
2 var__version =“_dev”;
3 varloadStaticFilesStr =[ '<script src="http://t.zoukankan.com/'+__version+'/js/ga.js" type="text/javascript"></script>','<script src="http://t.zoukankan.com/'+__version+'/js/test.js" type="text/javascript"></script>','<!-- version:'+__version+'-->'].join(“”);
4 
5 document.write(loadStaticFilesStr);
6 </script>

也就是说在版本控制下的文件全部在一个__version名字的文件夹下
每次修改的时候都会有一个新的文件夹建立,之前的那个文件夹就可以删除掉了

第二步: 开启服务器的ssi

如果按照上面的做了,你会发现,没有达到你想要的效果.include的代码直接作为注释了.
所以这一步就是要让服务器支持SSI

nginx的开启方式非常简单:

1 location /{
2 autoindex on;
3 ssi on;
4     root   F:/workspace/;
5 index  index.html index.htm;
6 }

样就保证你的include能被服务器返回,如果报路径错误,调整路径就可以了

OK,到这,基本的版本控制就解决了
你在本地开发的时候,修改本地的__version变量就可以,发布的时候也是修改此变量

我的目录结构
纯前端版本号策略第1张
还需要额外注意的问题:
1 客户端缓存问题.这个不需要担心,和你之前的缓存策略保持一致
2 安全问题,需要禁用执行程序权限

免责声明:文章转载自《纯前端版本号策略》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Nginx版本平滑升级方案带你一行一行分析SpringBoot原码解析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网页兼容性测试(工具使用IETESTER、Firefox、360安全浏览器)

网页兼容性测试主要是针对不同的浏览器进行的测试。由于用户浏览器的不同,往往都会使我们的网页发生页面样式错乱,图片无法显示等问题。对于前端开发工程师来说,确保代码在各种主流浏览器的各个版本中都能正常显示,因此要对编写出来的网页进行兼容性测试 点击【IETester】图标打开一个窗口,这个窗口跟浏览器类似。创建的浏览器页面默认展示的是IETester Ho...

virt viewer Usbredir USB重定向

编译virt viewer之前执行的configure命令,是没有使能usb-redir相关的功能,virt viewer是否支持usbredir是完全依赖于spice-gtk的。 virt viewer对spice-gtk的依赖关系,可以从virt viewer的configure结果看出来: [html]view plaincopy confi...

C++实现01串排序

题目内容:将01串首先按长度排序,长度相同时,按1的个数从少到多进行排序,1的个数相同时再按ASCII码值排序。 输入描述:输入数据中含有一些01串,01串的长度不大于256个字符。 输出描述:重新排列01串的顺序,使得串按题目描述的方式排序。 题目分析: (1)定义一个多重集合容器,该容器的元素类型为string,采用设定的比较函数 (2)因为元素是st...

前端工具-定制ESLint 插件以及了解ESLint的运行原理

这篇文章目的是介绍如何创建一个ESLint插件和创建一个ESLintrule,用以帮助我们更深入的理解ESLint的运行原理,并且在有必要时可以根据需求创建出一个完美满足自己需求的Lint规则。 插件目标 禁止项目中setTimeout的第二个参数是数字。 PS: 如果是数字的话,很容易就成为魔鬼数字,没有人知道为什么是这个数字, 这个数字有什么含义。...

用QT在Windows下编写dll程序

转自:http://blog.csdn.net/yyzsyx/article/details/6086052 因为QT必须有调用QApplication的exec方法,这样才能产生消息循环,QT的程序才可以运行。所以说如果我们使用了QT编写了dll程序,在普通的 windows程序中是不能调用的。在调用的时候会出现错误。当然QT提供了解决方法:那就是QTW...

前端框架Vue自学之Vue router小案例TabBar(七)

内容:TabBar设计与实现 正文: TabBar 零、前言(源码) 可以结合源码来看,最后自己实现。源码在我的GitHub上:TabBar源码(Vue-router小案例)。 一、tabbar的基本结构的搭建 1、需求 tabbar就是类似下图的东西。可以让我们传入一些组件,图片,文字等。当我们点击“首页”,显示首页的相关东西;当我们点击‘分类’,显示分...