静态资源发布方法及装置与流程

文档序号:11250918阅读:958来源:国知局
静态资源发布方法及装置与流程

本发明涉及互联网技术领域,具体涉及一种静态资源发布方法及装置。



背景技术:

网站前端开发中,涉及动态资源及静态资源的发布和加载。其中,静态资源可以简单理解为,直接把相应文件发送到客户端的文件都是静态资源,例如,静态资源包括网站本身的css,js等文件,还包括网站内容中的图片等资源。在网站开发中,如何准确有效的进行静态资源发布,是本领域技术人员需要考虑的一个技术问题。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种静态资源发布方法及装置。

依据本发明的一个方面,提供一种静态资源发布方法,包括:获取网站待发布的静态资源,并根据各静态资源之间的引用关系,得到当前资源依赖关系表,以及,从文件版本控制系统获取上一次发布的资源依赖关系表;将所述当前资源依赖关系表和所述上一次发布的资源依赖关系表进行比对,确定出发生变动的轻量静态资源;将所述轻量静态资源拷贝到所述文件版本控制系统,由所述文件版本控制系统将所述轻量静态资源上传至资源发布服务器。

优选的,在确定出发生变动的轻量静态资源之后,还包括:记录所述轻量静态资源的资源地址,生成轻量发布资源列表;根据所述轻量发布资源列表记录的资源地址,获取所述轻量静态资源的文件并拷贝到发布目录中。

优选的,所述将所述轻量静态资源拷贝到所述文件版本控制系统,包括:从所述发布目录获取到所述轻量静态资源的文件,并将所述轻量静态资源的文件拷贝到所述文件版本控制系统中。

优选的,在将所述轻量静态资源拷贝到所述文件版本控制系统之前,还包括:检测轻量静态资源的正确性;所述检测轻量静态资源的正确性具体包括:验证所述轻量发布资源列表的正确性,验证所述轻量静态资源的文件的正确性,和/或,验证所述发布目录中的所述轻量静态资源的文件是否编译正确。

优选的,所述将所述当前资源依赖关系表和所述上一次发布的资源依赖关系表进行比对,确定出发生变动的轻量静态资源,包括:读取所述当前资源依赖关系表中的静态资源的文件,将所述文件转换为json数组,并循环从json数组中读取出资源对象的校验和属性;判断所述校验和属性是否存在于所述上一次发布的资源依赖关系表中,如果已存在,则表明静态资源未发生变动,如果不存在,则确定静态资源发生了变动。

依据本发明的另一方面,还提供一种静态资源发布装置,包括:获取单元,用于获取网站待发布的静态资源,并根据各静态资源之间的引用关系,得到当前资源依赖关系表,以及,从文件版本控制系统获取上一次发布的资源依赖关系表;比对单元,用于将所述当前资源依赖关系表和所述上一次发布的资源依赖关系表进行比对,确定出发生变动的轻量静态资源;发布单元,用于将所述轻量静态资源拷贝到所述文件版本控制系统,由所述文件版本控制系统将所述轻量静态资源上传至资源发布服务器。

优选的,还包括:轻量处理单元,用于记录所述轻量静态资源的资源地址,生成轻量发布资源列表;以及,根据所述轻量发布资源列表记录的资源地址,获取所述轻量静态资源的文件并拷贝到发布目录中。

优选的,所述发布单元具体用于:从所述发布目录获取到所述轻量静态资源的文件,并将所述轻量静态资源的文件拷贝到所述文件版本控制系统中。

优选的,还包括:检测单元,用于检测轻量静态资源的正确性;具体包括:验证所述轻量发布资源列表的正确性,验证所述轻量静态资源的文件的正确性,和/或,验证所述发布目录中的所述轻量静态资源的文件是否编译正确。

优选的,所述比对单元具体用于:读取所述当前资源依赖关系表中的静态资源的文件,将所述文件转换为json数组,并循环从json数组中读取出资源对象的校验和属性;判断所述校验和属性是否存在于所述上一次发布的资源依赖关系表中,如果已存在,则表明静态资源未发生变动,如果不存在,则确定静态资源发生了变动。

可见,本发明实施例提供的静态资源发布方法中,将当前资源依赖关系表和上一次发布的资源依赖关系表进行比对,确定出发生变动的轻量静态资源,仅将轻量静态资源拷贝到文件版本控制系统,并由文件版本控制系统将轻量静态资源上传至资源发布服务器。

本发明方案至少存在两方面的技术效果:

(1)提供完整的轻量资源发布流程

根据资源关系依赖表生成轻量资源发布列表,保证轻量文件的完整性,提交文件前自动执行测试用例,保证文件内容无误,自动将文件拷贝到svn目录,减少手工操作。

(2)使用文件版本控制系统(例如svn)进行资源依赖关系文件管理

svn是一个方便团队协作、服务稳定的版本管理工具。使用svn来管理版本,契合当前网站前端的发布流程,发布时可同时提交资源依赖关系表和编译文件。在异常处理上也有很大的作用,遇到问题需要回滚代码时,资源依赖关系表和编译文件可以同时回滚到上个版本,避免出现回滚不同步的问题。而且,svn服务稳定,避免因为网络原因造成发布代码和资源依赖关系表不同步的问题,将每次全量发布文件改为轻量发布,提升发布效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明的一个实施例提供的静态资源发布方法流程图;

图2示出了根据本发明一个实施例提供的静态资源发布装置结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

目前发布静态资源的方案,一般是基于资源依赖关系表的管理,大多需要开发团队具有对应的文件服务器,这就额外配备一台服务器。而如果在开发客户端实现静态资源的发布,则有可能由于客户端网络不稳定而导致不能有效同步资源依赖关系表,导致发布有误。

针对上述问题,本发明方案主要进行了两种创新手段。第一,使用svn管理资源依赖关系表,这样可以保证每次要发布的代码和资源依赖关系表都能完全一致,并且可以在提交代码时进行有效校验。第二,实现轻量发布的完整解决方案,从更新svn代码到编译代码,最后提交到svn整个发布流程有效的整合到一起,解决从发布所有文件到只发布轻量的(有变动的)文件。本发明方案的一个典型应用场景是:网站开发中代码发布到线上环境的环节。主要应用在发布人员的本地机器上,跟随代码发布流程实施。

参见图1,示出了根据本发明的一个实施例提供的静态资源发布方法流程图。该方法至少包括步骤s101-s103,在一个优选实现方式中,还可以包括步骤s102-1和/或s102-2。

s101:获取网站待发布的静态资源,并根据各静态资源之间的引用关系,得到当前资源依赖关系表,以及,从文件版本控制系统获取上一次发布的资源依赖关系表。

静态资源包括但不限于html文件、js文件、css文件、res文件、图片文件等。可以从静态数据库中获取上述类型的静态资源,对于获取方式不作限制。

在获取到静态资源之后,执行前端资源编译流程,以html文件为起点分析资源依赖引用关系,例如,html文件引用js/css/res,js文件引用css/res,css引用res,生成本次待发布资源依赖关系表。

资源依赖关系表,用于记录模版文件和静态资源文件之间的互相依赖关系,以及静态资源文件的md5值,以模版文件为入口递归查找依赖资源,并将依赖资源的md5值,对应文件名生成资源依赖关系表。其中,md5为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。典型应用是对一段信息(message)产生信息摘要(message-digest),以防止被篡改,md5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个文件唯一的md5信息摘要。

在得到当前资源依赖关系表之后,还需要从文件版本控制系统中获取上一次发布的资源依赖关系表,目的在于后续步骤中对两个资源依赖关系表进行比对。

“文件版本控制系统”是本发明在前端开发客户端中采用的一个文件管理系统,例如,svn(subversion)作为一个典型的文件版本控制系统,是一个自由开源的版本控制系统。在subversion管理下,文件和目录可以超越时空。subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况,这样就可以借此将数据恢复到以前的版本,并可以查看数据的更改细节。

采用svn系统的好处是,资源依赖关系表和svn版本有效的保持一致,完全杜绝版本不一致的问题。

s102:将当前资源依赖关系表和上一次发布的资源依赖关系表进行比对,确定出发生变动的轻量静态资源。

具体的,确定出发生变动的轻量静态资源的具体比对过程可以包括:读取当前资源依赖关系表中的静态资源的文件,将文件转换为json数组,并循环从json数组中读取出资源对象的校验和属性;判断校验和属性是否存在于上一次发布的资源依赖关系表中,如果已存在,则表明静态资源未发生变动,如果不存在,则确定静态资源发生了变动。

可见,所谓“轻量静态资源”,即是通过将当前资源依赖关系表和上一次发布的资源依赖关系表进行比对确定出的发生变动的静态资源。这种确定轻量静态资源的优点是显而易见的,由于后续只需发布轻量静态资源,而不是将当前资源依赖关系表的所有静态资源都发布,由此可减少发布文件数量,提高发布效率。

下面以node为例进行说明。

node.js是一个基于chromev8引擎的javascript运行环境。node.js使用了一个事件驱动、非阻塞式i/o的模型,使其轻量又高效。node.js的包管理器npm,是全球最大的开源库生态系统。同时提高了高效的操作系统api接口,可以利用javascript编写脚本工具,完成项目的构建流程。

具体的,分析本次资源依赖关系表,例如,使用node的fs模块读取文件到内存中进行分析,转成json数组,循环取出资源对象{"filepath":"base.css","chksum":"aa","timestamp":"","deps":[],"consumers":[]}。使用lodash模块的find()方法判断当前资源对象的chksum属性(校验和属性)是否在上一个版本的资源依赖关系表中,如果已存在,则表明资源未有变动,本次不需要发布;如果不存在,则视为本次变更的对象。

将两个资源依赖关系表进行比对的优点在于,可有效的生成整个项目的资源依赖关系表,保证资源文件的有效更新。

在一个优选实现方式中,在确定出发生变动的轻量静态资源之后,还包括步骤s102-1:记录轻量静态资源的资源地址,生成轻量发布资源列表;以及,根据轻量发布资源列表记录的资源地址,获取轻量静态资源的文件并拷贝到发布目录中。

例如,分析轻量发布资源列表json数组,使用foreach方法,循环json数组取出列表中的文件地址,使用fs模块将对应文件拷贝至发布目录,得到本次需要发布的所有轻量静态资源。

在另一个优选实现方式中,在将轻量静态资源拷贝到文件版本控制系统之前,还包括步骤s102-2:检测轻量静态资源的正确性。具体的,步骤s102-2“检测轻量静态资源的正确性”具体可包括:验证轻量发布资源列表的正确性,验证轻量静态资源的文件的正确性,和/或,验证发布目录中的轻量静态资源的文件是否编译正确。

下面对这三个验证过程具体举例说明。

(1)轻量发布资源列表正确性验证

可使用与发布时相反的搜索匹配方法,以上次发布的资源依赖关系表为起点进行分析,例如,使用foreach循环上次依赖关系表数组,取出资源对象{"filepath":"base.css","chksum":"aa","timestamp":"","deps":[],"consumers":[]}。再循环本次依赖关系表,比较同一个资源对象的chksum属性是否发生改变,如果改变则加入资源列表。循环结束后生成轻量资源列表,与之前生成的资源列表进行对比,判断数组的大小和内容是否一致,以此来校验轻量发布资源列表是否正确。如果有错误,则给出具体提示信息,并退出发布流程。

(2)轻量静态资源的文件的正确性验证

通过该验证可确保轻量文件都已经正确拷贝到发布目录。例如,使用foreach方法,循环轻量发布资源列表json数组,取出资源对象{"filepath":"base.css","chksum":"aa","timestamp":"","deps":[],"consumers":[]},根据filepath字段判断发布目录中是否存在该文件。如果有错误,则给出具体提示信息,并退出发布流程。

(3)验证发布目录中的文件是否编译正确

例如,检测编译过后的文件是否包含“?__md5__”标记,如果存在,则编译有误,给出具体提示信息,提示哪个文件编译失败,并退出发布流程。

s103:将轻量静态资源拷贝到文件版本控制系统,由文件版本控制系统将轻量静态资源上传至资源发布服务器。

在与步骤s102-1对应的方式中,将轻量静态资源拷贝到文件版本控制系统的具体过程包括:从发布目录获取到轻量静态资源的文件,并将轻量静态资源的文件拷贝到文件版本控制系统中。

例如,调用fs-extra模块的fs.copysync()方法,将发布目录里的文件拷贝至svn目录。相较于现有方案,以前是开发人员手动拷贝文件,浪费了大量的时间并且容易出错,现在改为自动拷贝文件到目标目录,提升发布的效率和稳定性。例如,发布时可先提交到svn,再上传至服务器。在提交代码时,可通过svn日志可以进行最终确认,如果信息无误,则上传文件至发布服务器。这样实施的优点是,第一可保证同时提交svn文件和资源依赖关系表,保证文件统一性;第二可以利用svn的代码检查进行文件正确性校验。

可见,本发明实施例提供的静态资源发布方法中,将当前资源依赖关系表和上一次发布的资源依赖关系表进行比对,确定出发生变动的轻量静态资源,仅将轻量静态资源拷贝到文件版本控制系统,并由文件版本控制系统将轻量静态资源上传至资源发布服务器。

本发明方案至少存在两方面的技术效果:

(1)提供完整的轻量资源发布流程

根据资源关系依赖表生成轻量资源发布列表,保证轻量文件的完整性,提交文件前自动执行测试用例,保证文件内容无误,自动将文件拷贝到svn目录,减少手工操作。

(2)使用文件版本控制系统(例如svn)进行资源依赖关系文件管理

svn是一个方便团队协作、服务稳定的版本管理工具。使用svn来管理版本,契合当前网站前端的发布流程,发布时可同时提交资源依赖关系表和编译文件。在异常处理上也有很大的作用,遇到问题需要回滚代码时,资源依赖关系表和编译文件可以同时回滚到上个版本,避免出现回滚不同步的问题。而且,svn服务稳定,避免因为网络原因造成发布代码和资源依赖关系表不同步的问题,将每次全量发布文件改为轻量发布,提升发布效率。

与上述方法相对应,本发明实施例还提供一种静态资源发布装置,参见图2,该装置包括:

获取单元201,用于获取网站待发布的静态资源,并根据各静态资源之间的引用关系,得到当前资源依赖关系表,以及,从文件版本控制系统获取上一次发布的资源依赖关系表;

比对单元202,用于将所述当前资源依赖关系表和所述上一次发布的资源依赖关系表进行比对,确定出发生变动的轻量静态资源;

发布单元203,用于将所述轻量静态资源拷贝到所述文件版本控制系统,由所述文件版本控制系统将所述轻量静态资源上传至资源发布服务器。

优选的,该装置还包括:轻量处理单元204,用于记录所述轻量静态资源的资源地址,生成轻量发布资源列表;以及,根据所述轻量发布资源列表记录的资源地址,获取所述轻量静态资源的文件并拷贝到发布目录中。

优选的,所述发布单元203具体用于:从所述发布目录获取到所述轻量静态资源的文件,并将所述轻量静态资源的文件拷贝到所述文件版本控制系统中。

优选的,该装置还包括检测单元205,用于检测轻量静态资源的正确性;具体包括:验证所述轻量发布资源列表的正确性,验证所述轻量静态资源的文件的正确性,和/或,验证所述发布目录中的所述轻量静态资源的文件是否编译正确。

优选的,所述比对单元202具体用于:读取所述当前资源依赖关系表中的静态资源的文件,将所述文件转换为json数组,并循环从json数组中读取出资源对象的校验和属性;判断所述校验和属性是否存在于所述上一次发布的资源依赖关系表中,如果已存在,则表明静态资源未发生变动,如果不存在,则确定静态资源发生了变动。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的用户变身控制的系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1