热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Web前端构建工具版本号管理方案思考

前端构建工具满天飞的情景下,笔者也忍不住去捣鼓了一下,真正体验一下NODEJS带来的魅力,经过一段时间规划设计,终于将平台工具捣鼓出来了。在里面也体验了express,socket.io

前端构建工具满天飞的情景下,笔者也忍不住去捣鼓了一下,真正体验一下NODEJS带来的魅力,经过一段时间规划设计,终于将平台工具捣鼓出来了。在里面也体验了express, socket.io, grunt等node插件服务,使用很流畅,并且很好的完了我的基本需求(JS\CSS\IMAGE的压缩和自动部署功能)。

虽然基本功能完成,但是还有一个让人容易忽略而又重要的问题来了,就是资源文件的版本号的问题。在这里用的是SeaJS来做的模块管理,也在网上搜集了一下关于这块的资料。大致有以下两种方案:

1、  配置SeaJS的map对象。很方便,集中管理,但是也存在一些问题,比如:map对象的维护、配置文件引用页面的时间戳问题。

2、  生成文件sign,替换原有文件的名。这里不用考虑页面引用的时间戳问题,但是需要对资源及页面做一次全文查找替换,这对于分散部署的情况下将会非常复杂。

看了上面两种方案后,感觉在我的场景下还存在一些不足之处。笔者想要的是不影响开发情况下,开发人员完全不用考虑文件被缓存问题,只需完成编码,提交到现金网构建系统后,一键完成构建和部署。

确定好目标后,既然不想让开发同学关心时间戳问题,那么是否可以将这个工作交给Web服务器来做呢?那么交给服务器来做之后,如何动态的更新最新的资源文件呢?

有问题就好解决,将问题抛出来之后,方案也渐进呈现出来,不啰嗦了,直接上笔者的实现方案:

构建工具动态生成.htaccess文件,将构建的资源文件的URL重写列表同步到.htaccess文件中以达到由服务器动态获取新的资源文件。

(备注:笔者是在apache环境下,对IIS\NGINX\TOMCAT\RESIN\JBOSS等环境还需要再研究研究。)

看了上面的方案是不是很简单,那具体是怎么做的呢?笔者也在这里列一下。

1. 构建工具在构的时候生成一个与filename.ext对应的filename.ext.sha1的文件,这个.sha1的文件存放filename.ext文件的sha1值。

2. 在构建完成后,构建工具读取.htaccess的模板,并且遍历得到所有资源文件的列表,生成一个对filename.ext对应的filename.ext.sign的文件。

3. 按规则生成RewriteCond和RewriteRule。并将规则数据写到.htaccess文件中并部署到资源文件站点的根据目录。

Web前端开发 前端开发工具 NodeJS

图一:构建工具基本结构图

Web前端开发 前端开发工具 NodeJS

图二:构建后的文件列表

Web前端开发 前端开发工具 NodeJS

图三:生成一条Rule

Web前端开发 前端开发工具 NodeJS

图四:生成后的.htaccess文件

OK,到这里基本告一段落了,资源版本号解决了。但是对于性能影响这块还需要观察,待有时间再研究。

推荐阅读:http://blog.sina.com.cn/s/blog_7da9265c0102vatn.html


推荐阅读
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文介绍了Tomcat的基本操作,包括启动、关闭及首次访问的方法,并详细讲解了如何在IDEA中创建Web项目,配置Servlet及其映射,以及如何将项目部署到Tomcat。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • WebBenchmark:强大的Web API性能测试工具
    本文介绍了一款名为WebBenchmark的Web API性能测试工具,该工具不仅支持HTTP和HTTPS服务的测试,还提供了丰富的功能来帮助开发者进行高效的性能评估。 ... [详细]
  • 本文介绍了一个使用Spring框架和Quartz调度器实现每周定时调用Web服务获取数据的小项目。通过详细配置Spring XML文件,展示了如何设置定时任务以及解决可能遇到的自动注入问题。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 大家好,我是李白。本文将分享一个从零开始的全栈项目,涵盖了设计、前端、后端和服务端的全面学习过程。通过这个项目,我希望能够帮助初学者更好地理解和掌握全栈开发的技术栈。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文介绍了如何通过命令行有效地终止所有 Node.js 进程实例,以解决因端口冲突或其他服务冲突导致的问题。 ... [详细]
  • 在Linux系统中,find和grep是两个常用的命令,用于文件和文本的查找。本文将详细介绍这两个命令的区别及其常见用法。 ... [详细]
author-avatar
oDavid_仔o_880
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有