CN114579178A - 多版本组件运行方法、装置、终端设备及存储介质 - Google Patents
多版本组件运行方法、装置、终端设备及存储介质 Download PDFInfo
- Publication number
- CN114579178A CN114579178A CN202210240278.0A CN202210240278A CN114579178A CN 114579178 A CN114579178 A CN 114579178A CN 202210240278 A CN202210240278 A CN 202210240278A CN 114579178 A CN114579178 A CN 114579178A
- Authority
- CN
- China
- Prior art keywords
- code resource
- component
- code
- resource
- version
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例适用于研发管理技术领域,提供了一种多版本组件运行方法、装置、终端设备及存储介质,该方法包括:获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源;从第二代码资源中确定与第一代码资源具有差异化的第三代码资源;将第三代码资源从第二代码资源中迁移,得到第三组件;在与第二代码资源具有差异化的第一代码资源中,增加选择逻辑;选择逻辑用于在具有差异化的第一组件初始化时,提供第三组件的引入选择;根据选择逻辑,运行当前版本的项目或上一版本的项目。采用上述方法可以降低设备所包含的代码量。
Description
技术领域
本申请属于研发管理技术领域,尤其涉及一种多版本组件运行方法、装置、终端设备及存储介质。
背景技术
目前前端项目在开发上线过程中,经常会遇到当前版本的项目需求对于以前功能做非常大的改进。因此,在项目对应的软件应用程序被大量使用时,直接发布当前版本的项目可能存在相当大的风险,无法达到用户的使用预期。
针对上述场景,目前较为常规的做法是,在做需求改进的同时,将旧版本的项目中所有的功能进行保留,并与当前项目中所有新的功能进行聚合,以实现区分控制。然而,当原有的功能逻辑比较多时,会造成整个项目所包含的代码量大,降低代码的可维护性和可阅读性。
发明内容
本申请实施例提供了一种多版本组件运行方法、装置、终端设备及存储介质,可以解决在设备具有多版本项目的组件进行运行时,设备所包含的代码量大的问题。
第一方面,本申请实施例提供了一种多版本组件运行方法,该方法包括:
获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源;
从第二代码资源中确定与第一代码资源具有差异化的第三代码资源;
将第三代码资源从第二代码资源中迁移,得到第三组件;
在与第二代码资源具有差异化的第一代码资源中,增加选择逻辑;选择逻辑用于在具有差异化的第一组件初始化时,提供第三组件的引入选择;
根据选择逻辑,运行当前版本的项目或上一版本的项目。
第二方面,本申请实施例提供了一种多版本组件运行装置,该装置包括:
获取模块,用于获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源;
确定模块,用于从第二代码资源中确定与第一代码资源具有差异化的第三代码资源;
迁移模块,用于将第三代码资源从第二代码资源中迁移,得到第三组件;
选择模块,用于在与第二代码资源具有差异化的第一代码资源中,增加选择逻辑;选择逻辑用于在具有差异化的第一组件初始化时,提供第三组件的引入选择;
运行模块,用于根据选择逻辑,运行当前版本的项目或上一版本的项目。
第三方面,本申请实施例提供了一种终端设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述第一方面的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现如上述第一方面的方法。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面的方法。
本申请实施例与现有技术相比存在的有益效果是:终端设备在获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源后,将第一代码资源分别与对应的第二代码资源进行比对,以在两个代码资源之间具有差异时,可以从第二代码资源中仅对具有差异的第三代码资源进行剥离,作为第三组件。同时,在该具有差异化的第一代码资源的初始化函数中,增加选择逻辑。以此,终端设备可以基于选择逻辑确定用户的使用选择,进而灵活的使用当前版本的项目或上一版本的项目。并且,因定义了选择逻辑,且将具有差异化第三代码资源放置在第三组件中,因此,终端设备也可以直接将上一版本的项目中所有第二组件的第二代码资源删除,以提高项目的代码的整体可阅读性和可维护性。不仅可以降低终端设备所包含的项目的代码量,而且可以提高项目在启动时对页面进行加载和解析的效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的一种多版本组件运行方法的实现流程图;
图2是本申请一实施例提供的一种多版本组件运行方法的S102的一种实现方式示意图;
图3是本申请一实施例提供的一种多版本组件运行方法中第一节点树和第二节点树的应用场景示意图;
图4是本申请一实施例提供的一种多版本组件运行方法的S1023的一种实现方式示意图;
图5是本申请另一实施例提供的一种多版本组件运行方法的S1023的一种实现方式示意图;
图6是本申请又一实施例提供的一种多版本组件运行方法的S1023的一种实现方式示意图;
图7是本申请另一实施例提供的一种多版本组件运行方法的实现流程图;
图8是本申请一实施例提供的一种多版本组件运行方法的S104的一种实现方式示意图;
图9是本申请一实施例提供的一种多版本组件运行装置的结构示意图;
图10是本申请一实施例提供的一种终端设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
本申请实施例提供的多版本组件运行方法可以应用于平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)等终端设备上,本申请实施例对终端设备的具体类型不作任何限制。
请参阅图1,图1示出了本申请实施例提供的一种多版本组件运行方法的实现流程图,该方法包括如下步骤:
S101、终端设备获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源。
在一实施例中,执行上述多版本组件运行方法的终端设备中,需要预先安装有或可以调用对当前版本的项目和上一版本的项目进行切换的工具。
具体的,终端设备可以通过如下方式引入上述工具:在终端设备的命令行中,定位当前版本的项目在终端设备的根目录。即当前版本的项目在终端设备中的安装地址。之后,执行命令npm i switch-between-two-version-D,以将上述工具下载到当前版本的项目的根目录中。其中,上述命令为下载命令,用于从网络平台上下载上述工具包文件。
之后,将上述工具通过已有的import语法引入至webpack配置文件中。其中,webpack配置文件为当前版本的项目本身自带的文件,其用于对工具进行构建以及配置。其中,将上述工具引入到webpack配置文件的目的在于:在原有webpack配置文件的基础上可以添加上述工具,并使用该工具。
其中,webpack配置文件所需配置的内容包括但不限于:每个第一组件分别在根目录中的相对路径(即第一组件地址)、每个第一组件的组件名称、每个第二组件分别在对应的根目录中的相对路径(第二组件地址)、每个第二组件的组件名称、当前版本的项目在代码平台的地址、上一版本的项目在代码平台的地址、登录用户名以及密码等内容。
其中,项目的代码资源一般会保存在一个代码平台,代码平台内有各种项目的代码仓库,每个代码仓库有各自在代码平台上的地址,且每个代码仓库用于存储同一个项目的各个版本的代码资源。配置当前版本的项目在代码平台的地址目的在于:终端设备可以基于当前版本的项目在代码平台的地址,从代码仓库中找到上一版本的项目的所对应的代码资源。可以理解的是,当前版本的项目通常已安装在终端设备上。其中,登录用户名和密码用于工作人员或用户登录当前版本的项目所在的代码仓库。
在一实施例中,上述一个项目通常包括一个软件应用程序及其相关文件。其中,软件应用程序为具体投入使用的产品,相关文件可以为软件应用程序开发时各种功能对应的代码文件。其中,一个软件应用程序通常具有多种功能,因此,上述项目中可以包括以每种功能进行区分的多个第一组件。其中,每个第一组件对应开发的代码文件,即为第一代码资源。
在一实施例中,上述第二组件与第二代码资源类似,区别仅在于项目的版本不同,对此不做详细解释。需要说明的是,对于不同版本的项目,其区别可能仅在于当前版本的项目相对于上一版本的项目新增和/或删除某些功能,以满足市场需求。因此,可以理解的是,对于同一个功能的组件对应的代码资源,其可能相同也可能不同。
S102、终端设备从第二代码资源中确定与第一代码资源具有差异化的第三代码资源。
在一实施例中,上述第三代码资源为从第二代码资源剥离出来的部分或全部代码资源。可以理解的是,若第一代码资源与第二代码资源未做改变,则可以不用进行剥离。若第一代码资源与第二代码资源只有部分代码进行改变,则可以从第二代码资源中剥离出该部分代码资源;以及,若第一代码资源与第二代码资源具有大量或全部的代码改变,则应当将第二代码资源确定为具有差异化的第三代码资源。
在一具体实施例中,第一组件和第二组件具有多个,每个第一组件分别对应一个第一代码资源,以及每个第二组件分别对应一个第二代码资源;第三代码资源包括页面元素类型的代码资源:参照图2,终端设备可以通过如下子步骤S1021-S1023,从第二代码资源中确定与第一代码资源具有差异化的第三代码资源:
S1021、终端设备根据每个第一组件分别在当前版本的项目的存储路径,生成包含每个第一组件之间的节点依赖关系的第一节点树。以及,
S1022、终端设备根据每个第二组件分别在上一版本的项目的存储路径,生成包含每个第二组件之间的节点依赖关系的第二节点树。
在一实施例中,任意一个代码资源通常包括页面元素类型的代码资源,以及对页面元素类型的代码资源执行页面逻辑的逻辑元素类型的代码资源。在实际场景中,以第一代码资源为例,每个第一代码资源中属于页面元素类型的代码资源通常存储在根目录的template标签中,而每个第一代码资源中属于逻辑元素类型的代码资源通常存储在根目录中的script标签中。
可以理解的是,在页面元素类型的第一代码资源发生变化时,且发生变化的第一代码资源中具有相应的页面逻辑处理,则可表明在script标签中,对应的逻辑元素类型的第一代码资源也将发生变化。
基于此,在本实施例中,工具可以先通过上述步骤得到具有差异化,且属于页面元素类型的第三代码资源,而后在确定对应的逻辑元素类型的代码资源。即在本实施例中,上述S1021-S1023步骤为针对页面元素类别的第三代码资源进行确定的方式。
在一实施例中,上述当前版本的项目的存储路径为每个第一组件在当前版本的根目录中的存储路径,其为当前版本的项目的所有第一组件的存储路径。在生成第一节点树时,工具可以获取每个第一组件存储在根目录下的存储路径。并且,每个第一组件对应的存储路径均有相应的联系,彼此之间也均具有一定的等级关系。
基于此,工具内部可预先存储有递归程序,可以在读取到每个第一组件相应的存储路径后,建立节点,并将节点的对象(第一组件对应的第一代码资源)添加至节点内。若该存储路径下还存在其余第一组件,则该工具可以在该节点下逐个延伸并建立节点。此时,逐个延伸并建立的节点为上一节点的子节点。其中,在实际情况下,用户本身不知道某个节点下是否还具有下一节点(子节点),而递归程序在运行时可以循环调用自身,并依次递归逐渐添加节点,以生成第一节点树。
其中,上述节点依赖关系包括但不限于父节点与子节点之间的包含关系,以及兄弟节点之间的并列关系。
在一实施例中,上述第二节点树的生成与上述第一节点树的生成类似,对此不再进行说明。
S1023、针对属于页面元素类型的第一代码资源和第二代码资源,终端设备将第一节点树与第二节点树中,处于相同层级以及相同位置的节点分别对应的第一代码资源和第二代码资源进行差异化比对,得到页面元素类型的第三代码资源。
在一实施例中,在进行第一代码资源和第二代码资源比对时,是将相同层级以及相同位置的节点分别对应的第一代码资源与第二代码资源进行比对,以得到页面元素类型的第三代码资源。
具体的,参照图3,O1为当前版本的项目对应的第一节点树,O2对应上一版本的项目对应的第二节点树。O1、A1、B1、C1分别对应一种第一组件,O2、A2、B2、C2分别对应一种第二组件。其中,A1与A2为执行相同功能的组件,B1与B2为执行相同功能的组件,C1与C2为执行相同功能的组件。并且,A1与A2处于相同层级的相同位置,B1与B2处于相同层级的相同位置,C1与C2处于相同层级的相同位置。
以A1和A2为例,A1相对于A2,其虽然执行相同功能,但可能为了减少上一版本中A2功能的漏洞,对其做了部分改进。并且,B1与B2之间未做改进,以及C1与C2之间未做改进。因此,在进行比对时,终端设备只可以从A2对应的第二代码资源中,得到具有差异化的第三代码资源。
然而,在另一示例中,在上一版本的项目对应的第二节点树为O3时,虽然,A1是相对于A3做出的部分改进,且属于相同层级,但是其在相同层级中的位置不同。因此,在比对时,是将A1与C3进行比对。基于此,可以认为,在相同层级的父节点(O1、O2)内,当前版本的第一代码资源A1,相比于上一版本的第二代码资源A3,其顶部代码做了删除(即删除了原先处于A3之前的,C3和B3分别对应的第二代码资源),以及尾部代码做了添加(即在A1的第一代码资源后添加了B1和C1对应的第一代码资源)。因此,工具可以将上一版本的项目中该整个父节点(O3)内所包含的C3、B3、A3对应的第二代码资源进行剥离。即将O3对应的第二组件代码资源,作为差异化比对后得到的属于页面元素类型的第三代码资源。
在一具体实施例中,参照4,终端设备可以通过如下子步骤S123a-S123c,将第一节点树与第二节点树中,处于相同层级以及相同位置的节点分别对应的第一代码资源和第二代码资源进行差异化比对,得到页面元素类型的第三代码资源:
S123a、终端设备比对第一代码资源和对应的第二代码资源,得到具有差异化的代码片段的行数。
S123b、若行数未超过预设行数,则终端设备将具有差异化的代码片段确定为页面元素类型的第三代码资源。
S123c、否则,终端设备从第二节点树中,确定与第二代码资源对应的节点处于相同层级的兄弟节点;将节点与兄弟节点分别对应的第二代码资源均确定为页面元素类型的第三代码资源。
在一实施例中,在相同层级以及相同位置的节点分别对应的第一代码资源和第二代码资源进行差异化比对时,若具有差异化的代码片段的代码行数未超过预设函数,则表明此次当前版本对第一组件的仅具有较小的改进点。因此,可以只将具有差异化的代码片段确定为页面元素类型的第三代码资源。
在一实施例中,上述预设行数可以预设在终端设备内部进行设置,本实施例对预设行数的具体数值不作限定。
可以理解的是,在具有差异化的代码片段超过预设行数时,其可能存在图3中所记录的O1节点分别与O2节点和O3节点的情况。即,处于相同层级的父节点(O1、O2)中,当前版本的第一代码资源相比于上一版本的第二代码资源做了较大的改进。因此,在该情况下,终端设备可以将整个O2父节点或O3父节点分别对应包含的各个第二代码资源,均确定为一个第三组件对应的第三代码资源。
需要说明的是,任意一个代码资源通常包括页面元素类型的代码资源,以及对页面元素类型的代码资源,执行页面逻辑的逻辑元素类型的代码资源。因此,在通过上述S123a-S123步骤得到页面元素类型的第三代码资源后,参照图5,还可以通过如下步骤S123d-S123g,从第二代码资源中确定出具有差异化的逻辑元素类型的第三代码资源:
S123d、针对任意一个页面元素类型的第三代码资源,终端设备从页面元素类型的第三代码资源中确定页面逻辑事件。
在一实施例中,上述页面逻辑事件包括但不限于点击事件关键字,输入框失去焦点事件,输入框输入事件,输入框内容改变事件。其中,确定页面元素类型的第三代码资源中是否包含页面逻辑事件,可以根据第三代码资源中的关键字、内容或标签属性等确定。
示例性的,标签属性为@click的第三代码资源其表示包含点击事件关键字;标签属性为@blur的第三代码资源其表示包含输入框输入事件;标签属性为@change的第三代码资源其表示包含输入框内容改变事件;标签属性为@input的第三代码资源其表示为包含输入框输入事件,对此不作限定。
S123e、终端设备从逻辑元素类型的第二代码资源中,获取逻辑事件对应的回调函数;回调函数包含有执行页面逻辑事件的代码资源。
S123f、终端设备根据回调函数的函数名,从逻辑元素类型的第一代码资源中,获取与函数名一致的目标函数名。
在一实施例中,在通过第三代码资源中的关键字、内容或标签属性等确定页面逻辑事件后,可以根据关键字、内容或标签属性等信息从页面逻辑事件中确定对应的回调函数。该回调函数中通常包含有执行页面逻辑事件的代码资源。
示例性的,@click为标签属性,它对应的属性值即为回调函数的函数名。如:@click=“函数名”。此时,因第三代码资源是从第二代码资源中进行剥离得到。因此,可认为函数名为第二代码资源中回调函数的函数名。
S123g、若未获取到目标函数名,或获取到的目标函数名对应的第一代码资源与函数名对应的第二代码资源不一致,则终端设备将函数名对应的第二代码资源确定为具有差异化的第三代码资源。
在一实施例中,需要说明的是,为了确定相应的回调函数所执行的页面逻辑是否更改,终端设备还可以通过回调函数的函数名,反向查找当前版本的第一组件中是否存在相同的目标函数名。
可以理解的是,通常上一版本的项目和当前版本的项目中,相同功能组件中执行相同页面逻辑事件的规则一致。因此,若第一组件中存在与函数名相同的目标函数名,则可以比对上一版本中的函数名对应的回调函数,与当前版本中的目标函数名对应的目标回调函数是否一致。即比对回调函数和目标回调函数中所分别包含的执行页面逻辑事件的代码资源是否一致。如果一致,则确定该函数名对应的回调函数所包含的代码资源不为第三代码资源。若不一致,或不存在相同的目标函数名,则可以直接判定该回调函数在当前版本的第一组件中已被删除或更换。因此,终端设备可以将函数名对应的回调函数所包含的代码资源,确定为具有差异化的第三代码资源。
在另一实施例中,经过S102a-S102g中的步骤后,可能会得到一个或多个差异化的第三代码资源。但是,这仅仅是页面元素类型、以及相关的页面逻辑类型进行比对后得到的第三代码资源。在当前版本的第一组件,以及上一版本的第二组件中,还可能存在初始化逻辑差异化,这部分差异化的逻辑也需要进行比对剥离。
基于此,参照图6,终端设备还可以通过如下子步骤S102h-S102i从第二代码资源中,确定与第一代码资源具有差异化的第三代码资源具体的:
S102h、终端设备从第一组件的生命周期函数中,查找包含的第一初始化代码资源;以及,从第二组件的生命周期函数中,查找包含的第二初始化代码资源。
S102i、若第一初始化代码资源与第二初始化代码资源具有差异,则终端设备将第二初始化代码资源确定为具有差异化的第三代码资源。
在一实施例中,上述生命周期函数为存储有第一组件初始化的逻辑函数。即第一组件的生命周期函数中具有第一初始化代码资源;对应的,在第二组件的生命周期函数中具有第二初始化代码资源。
需要说明的是,通常当前版本的项目在终端设备启动,但还未处于运行状态时,终端设备需对当前版本的项目先执行初始化过程。例如,在初始化的过程中,终端设备需为当前版本的项目中的每个第一组件,分别分配在终端设备上的运行地址,或者确定此时是否有足够的运行内存运行当前版本的项目。
然而,在当前项目的版本发生改变时,对于当前版本的第一组件和上一版本的第二组件中,其第一组件的初始化逻辑可能发生改变。因此,该部分也需要进行差异化比对,以在具有差异时,将第二初始化代码资源确定为具有差异化的第三代码资源。
可以理解但是,若第一初始化代码资源与第二初始化代码资源未具有差异,则可以不建立第三代码资源。
S103、终端设备将第三代码资源从第二代码资源中迁移,得到第三组件。
在一实施例中,在第一组件与第二组件分别具有多个时,其得到的第三组件可能也对应有多个。即将每个第一组件与第二组件进行比对后,得到的差异化代码资源,分别作为一个第三组件,或者作为第三组件中的一个子组件,对此不作限定。
可以理解的是,在得到的差异化代码资源作为一个子组件时,则多个子组件将共同形成一个第三组件。
在一具体实施例中,参照图7,在将第三代码资源从第二代码资源中迁移,得到第三组件之后,终端设备还可以通过如下步骤S103a-S103c,对第三组件进行处理:
S103a、终端设备将第三代码资源中初始化类型的第三代码资源迁移至第一文件中;第一文件在执行时,用于动态的引入第一文件中包含的第三代码资源。
在一实施例中,上述第一文件具体为在当前版本的目录的template标签中的新建文件,其用于存储页面元素类型的第三代码资源以及逻辑元素类型的第三代码资源。需要说明的是,在第一文件存储有页面元素类型的第三代码资源以及逻辑元素类型的第三代码资源后,其第一文件在被执行时,可以动态的引入第一文件中包含的第三代码资源。
S103b、终端设备将第三代码资源中初始化类型的第三代码资源迁移至第二文件中;第二文件用于根据预设的配置项,对包含的初始化类型的第三代码资源进行注册激活。
S103c、终端设备将第一文件以及第二文件存储在当前版本的项目的目录中。
需要说明的是,上述属于页面元素类型的第三代码资源,与属于页面逻辑类型的第三代码资源,其均是在对应的第二组件运行时,才需执行的代码。而具有差异的第二初始化代码资源,其对应的第二组件的初始化逻辑部分,为不同类别的第三代码资源。
因此,对于第二初始化代码资源,其应当新建第二文件进行存储。其中,第二文件具体可以为mixin文件。需要说明的是,使用mixins文件进行存储的原因在于:只有通过mixins的执行方式才可以动态引入mixins文件中属于初始化类型的第三代码资源,并可以对该初始化类型的第三代码资源,在当前版本的项目中进行注册和激活。其中,在当前版本第一组件和上一版本的第二组件中具有差异化的组件具有多个时,mixins文件中也将包含多个具有差异的第二初始化代码资源的子文件。
需要补充的是,将第一文件以及第二文件存储在当前版本的项目的目录中,其目的在于:只有在当前版本的项目初始化时,才可以通过调用当前版本的项目中每个第一组件的方式,调用同样存储在当前版本的项目的目录中所包含的第一文件以及第二文件。
S104、终端设备在与第二代码资源具有差异化的第一代码资源中,增加选择逻辑;选择逻辑用于在具有差异化的第一组件初始化时,提供第三组件的引入选择。
在一实施例中,上述选择逻辑为具有差异化的第一组件在初始化时,提供是否引入第三组件的引入选择,并根据用户在引入选择中的选择指令,确定在运行当前版本的第一组件时,是否引入第三组件运行。
可以理解的是,因第三组件为与第一组件具有差异化的组件,也即,在运行当前版本的第一组件时,若引入第三组件运行,则表明与第三组件具有差异化的第一组件将不会运行,而其他第一组件将正常运行。但是,因其他第一组件与上一版本的项目中对应的第二组件之间不具有差异。因此,在运行不具有差异的第一组件时,同时引入从上一版本的项目中进行迁移的第三组件运行,终端设备即可以认为是在运行上一版本的项目。此时,终端设备中仅存储具有差异化的第三组件对应的代码量,无需存储上一版本的项目所有的代码量。
具体的,参照图8,终端设备可以通过如下子步骤S1041-S1042在与第二代码资源具有差异化的第一代码资源中,增加选择逻辑:
S1041、终端设备获取第三组件在当前版本的项目中的存储地址。
S1042、终端设备将存储地址写入第一初始化代码资源的选择逻辑中。
在一实施例中,上述已对第一初始化代码资源进行解释,对此不再进行说明。可以理解的是,若第一组件与第二组件的数量为一个,在第一组件与第二组件具有差异化时,其生成的第三组件的数量也应当具有一个。因此,在第一组件中增加选择逻辑,其引入的选择只有该唯一的第三组件。
然而,在第一组件和第二组件的数量为多个时,其具有差异化的第三组件可能具有多个。但是,任意一个第三组件的产生均是因一个第一组件与一个第二组件之间具有差异化时生成的。因此,终端设备可以将第三组件与该第一组件之间建立映射关系,以对第三组件进行引用。
需要说明的是,在第一初始化代码资源中添加选择逻辑的原因在于:终端设备在运行当前版本的项目中的第一组件时,第一组件也是需要先执行初始化的过程,并在执行初始化的过程后,才可正常运行第一组件的逻辑元素类型的代码资源,和/或页面元素类型的代码资源。此时,终端设备在执行第一组件中的初始化过程时,即可以先根据用户对选择逻辑的选择指令,智能的选择运行当前版本的项目或上一版本的项目。
其中,在第一初始化代码资源写入选择逻辑时,还需要将该第一组件对应的第三组件的存储地址写入该选择逻辑中。示例性的,若A1第一组件与A2第一组件之间具有差异化时,终端设备可以建立M第三组件,并确定M第三组件在终端设备的存储地址。而后,将引入第三组件的语法()=>import('M第三组件的组件地址')设置在选择逻辑中。其中,选择逻辑可以具体为JSON(JavaScriptObject Notation,JS对象简谱)的逻辑语句格式。
S105、终端设备根据选择逻辑,运行当前版本的项目或上一版本的项目。
在一实施例中,在选择逻辑接收到的用户的引入选择为使用上一版本的项目的第二组件时,其可以通过动态引入组件的语法,将第三组件动态的引入到当前版本的第一组件中进行运行。以及,在对应的第一组件中接收到的引入选择为不引入时,则可以不引用第三组件的内容替换第一组件的对应部分。
在一实施例中,上述仅为对页面元素类型以及页面逻辑类型的第三组件的引用,而针对第二文件中初始化类型的第三代码资源的引用,其引用方法与上述内容相似。例如,两者第三组件的引用可以共用一个选择逻辑。区别点仅在于:在需要动态引入第二文件时,终端设备需要先在第一组件中,对相应的第二文件进行配置,即需要在第一组件中对第二文件进行注册激活,才可以进行使用。具体为上述S103c中记载的终端设备使用mixins文件对初始化类型的第三代码资源进行存储,并利用mixins文件的执行方式对该文件进行配置。
在本实施例中,终端设备在获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源后,将第一代码资源分别与对应的第二代码资源进行比对,以在两个代码资源之间具有差异时,可以从第二代码资源中仅对具有差异的第三代码资源进行剥离,作为第三组件。同时,在该具有差异化的第一代码资源的初始化函数中,增加选择逻辑。以此,终端设备可以基于选择逻辑确定用户的使用选择,进而灵活的使用当前版本的项目或上一版本的项目。并且,因定义了选择逻辑,且将具有差异化第三代码资源放置在第三组件中,因此,终端设备也可以直接将上一版本的项目中所有第二组件的第二代码资源删除,以提高项目的代码的整体可阅读性和可维护性。不仅可以降低终端设备所包含的项目的代码量,而且可以提高项目在启动时对页面进行加载和解析的效率。
请参阅图9,图9是本申请实施例提供的一种多版本组件运行装置的结构框图。本实施例中多版本组件运行装置包括的各模块用于执行图1、图2、图4至图8对应的实施例中的各步骤。具体请参阅图1、图2、图4至图8以及图1、图2、图4至图8所对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。参见图9,多版本组件运行装置900可以包括:获取模块910、确定模块920、迁移模块930、选择模块940以及运行模块950,其中:
获取模块910,用于获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源。
确定模块920,用于从第二代码资源中确定与第一代码资源具有差异化的第三代码资源。
迁移模块930,用于将第三代码资源从第二代码资源中迁移,得到第三组件;
选择模块940,用于在与第二代码资源具有差异化的第一代码资源中,增加选择逻辑;选择逻辑用于在具有差异化的第一组件初始化时,提供第三组件的引入选择;
运行模块950,用于根据选择逻辑,运行当前版本的项目或上一版本的项目。
在一实施例中,第一组件和第二组件具有多个,每个第一组件分别对应一个第一代码资源,以及每个第二组件分别对应一个第二代码资源;第三代码资源包括页面元素类型的代码资源:确定模块920还用于:
根据每个第一组件分别在当前版本的项目的存储路径,生成包含每个第一组件之间的节点依赖关系的第一节点树;以及,根据每个第二组件分别在上一版本的项目的存储路径,生成包含每个第二组件之间的节点依赖关系的第二节点树;针对属于页面元素类型的第一代码资源和第二代码资源,将第一节点树与第二节点树中,处于相同层级以及相同位置的节点分别对应的第一代码资源和第二代码资源进行差异化比对,得到页面元素类型的第三代码资源。
在一实施例中,确定模块920还用于:
比对第一代码资源和对应的第二代码资源,得到具有差异化的代码片段的行数;若行数未超过预设行数,则将具有差异化的代码片段确定为页面元素类型的第三代码资源;否则,从第二节点树中,确定与第二代码资源对应的节点处于相同层级的兄弟节点;将节点与兄弟节点分别对应的第二代码资源均确定为页面元素类型的第三代码资源。
在一实施例中,第三代码资源还包括逻辑元素类型的代码资源;确定模块920还用于:
针对任意一个页面元素类型的第三代码资源,从页面元素类型的第三代码资源中确定页面逻辑事件;从逻辑元素类型的第二代码资源中,获取逻辑事件对应的回调函数;回调函数包含有执行页面逻辑事件的代码资源;根据回调函数的函数名,从逻辑元素类型的第一代码资源中,获取与函数名一致的目标函数名;若未获取到目标函数名,或获取到的目标函数名对应的第一代码资源与函数名对应的第二代码资源不一致,则将函数名对应的第二代码资源确定为具有差异化的第三代码资源。
在一实施例中,第三代码资源还包括初始化类型的代码资源:确定模块920还用于:
从第一组件的生命周期函数中,查找包含的第一初始化代码资源;以及,从第二组件的生命周期函数中,查找包含的第二初始化代码资源;若第一初始化代码资源与第二初始化代码资源具有差异,则将第二初始化代码资源确定为具有差异化的第三代码资源。
在一实施例中,多版本组件运行装置900还包括:
第一文件迁移模块,用于将页面元素类型的第三代码资源以及逻辑元素类型的第三代码资源迁移至第一文件中;第一文件在执行时,用于动态的引入第一文件中包含的第三代码资源。以及,
第二文件迁移模块,用于将初始化类型的第三代码资源迁移至第二文件中;第二文件用于根据预设的配置项,对包含的初始化类型的第三代码资源进行注册激活。
存储模块,用于将第一文件以及第二文件存储在当前版本的项目的目录中。
在一实施例中,选择模块940还用于:
获取第三组件在当前版本的项目中的存储地址;将存储地址写入第一初始化代码资源的选择逻辑中。
当理解的是,图9示出的多版本组件运行装置的结构框图中,各模块用于执行图1、图2、图4至图8对应的实施例中的各步骤,而对于图1、图2、图4至图8对应的实施例中的各步骤已在上述实施例中进行详细解释,具体请参阅图1、图2、图4至图8以及图1、图2、图4至图8所对应的实施例中的相关描述,此处不再赘述。
图10是本申请一实施例提供的一种终端设备的结构框图。如图10所示,该实施例的终端设备1000包括:处理器1010、存储器1020以及存储在存储器1020中并可在处理器1010运行的计算机程序1030,例如多版本组件运行方法的程序。处理器1010执行计算机程序1030时实现上述各个多版本组件运行方法各实施例中的步骤,例如图1所示的S101至S105。或者,处理器1010执行计算机程序1030时实现上述图9对应的实施例中各模块的功能,例如,图9所示的模块910至950的功能,具体请参阅图9对应的实施例中的相关描述。
示例性的,计算机程序1030可以被分割成一个或多个模块,一个或者多个模块被存储在存储器1020中,并由处理器1010执行,以实现本申请实施例提供的多版本组件运行方法。一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序1030在终端设备1000中的执行过程。例如,计算机程序1030可以实现本申请实施例提供的多版本组件运行方法。
终端设备1000可包括,但不仅限于,处理器1010、存储器1020。本领域技术人员可以理解,图10仅仅是终端设备1000的示例,并不构成对终端设备1000的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器1010可以是中央处理单元,还可以是其他通用处理器、数字信号处理器、专用集成电路、现成可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器1020可以是终端设备1000的内部存储单元,例如终端设备1000的硬盘或内存。存储器1020也可以是终端设备1000的外部存储设备,例如终端设备1000上配备的插接式硬盘,智能存储卡,闪存卡等。进一步地,存储器1020还可以既包括终端设备1000的内部存储单元也包括外部存储设备。
本申请实施例提供了一种终端设备,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述各个实施例中的多版本组件运行方法。
本申请实施例提供了一种计算机可读存储介质,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述各个实施例中的多版本组件运行方法。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述各个实施例中的多版本组件运行方法。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种多版本组件运行方法,其特征在于,所述方法包括:
获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源;
从所述第二代码资源中确定与所述第一代码资源具有差异化的第三代码资源;
将所述第三代码资源从所述第二代码资源中迁移,得到第三组件;
在与所述第二代码资源具有差异化的所述第一代码资源中,增加选择逻辑;所述选择逻辑用于在具有差异化的所述第一组件初始化时,提供所述第三组件的引入选择;
根据所述选择逻辑,运行所述当前版本的项目或所述上一版本的项目。
2.根据权利要求1所述的多版本组件运行方法,其特征在于,所述第一组件和所述第二组件具有多个,每个所述第一组件分别对应一个所述第一代码资源,以及每个所述第二组件分别对应一个所述第二代码资源;所述第三代码资源包括页面元素类型的代码资源:
所述从所述第二代码资源中确定与所述第一代码资源具有差异化的第三代码资源,包括:
根据每个所述第一组件分别在所述当前版本的项目的存储路径,生成包含每个所述第一组件之间的节点依赖关系的第一节点树;以及,
根据每个所述第二组件分别在所述上一版本的项目的存储路径,生成包含每个所述第二组件之间的节点依赖关系的第二节点树;
针对属于所述页面元素类型的所述第一代码资源和所述第二代码资源,将所述第一节点树与所述第二节点树中,处于相同层级以及相同位置的节点分别对应的所述第一代码资源和所述第二代码资源进行差异化比对,得到所述页面元素类型的第三代码资源。
3.根据权利要求2所述的多版本组件运行方法,其特征在于,所述将所述第一节点树与所述第二节点树中,处于相同层级以及相同位置的节点分别对应的所述第一代码资源和所述第二代码资源进行差异化比对,得到页面元素类型的第三代码资源,包括:
比对所述第一代码资源和对应的所述第二代码资源,得到具有差异化的代码片段的行数;
若所述行数未超过预设行数,则将所述具有差异化的代码片段确定为所述页面元素类型的第三代码资源;
否则,从所述第二节点树中,确定与所述第二代码资源对应的节点处于相同层级的兄弟节点;将所述节点与所述兄弟节点分别对应的第二代码资源均确定为所述页面元素类型的第三代码资源。
4.根据权利要求2或3所述的多版本组件运行方法,其特征在于,所述第三代码资源还包括逻辑元素类型的代码资源;
在所述得到所述页面元素类型的第三代码资源之后,还包括:
针对任意一个所述页面元素类型的第三代码资源,从所述页面元素类型的第三代码资源中确定页面逻辑事件;
从所述逻辑元素类型的第二代码资源中,获取所述逻辑事件对应的回调函数;所述回调函数包含有执行所述页面逻辑事件的代码资源;
根据所述回调函数的函数名,从所述逻辑元素类型的第一代码资源中,获取与所述函数名一致的目标函数名;
若未获取到所述目标函数名,或获取到的所述目标函数名对应的第一代码资源与所述函数名对应的第二代码资源不一致,则将所述函数名对应的第二代码资源确定为所述具有差异化的第三代码资源。
5.根据权利要求1-3任一所述的多版本组件运行方法,其特征在于,所述第三代码资源还包括初始化类型的代码资源:
所述从所述第二代码资源中确定与所述第一代码资源具有差异化的第三代码资源,包括:
从所述第一组件的生命周期函数中,查找包含的第一初始化代码资源;以及,从所述第二组件的生命周期函数中,查找包含的第二初始化代码资源;
若所述第一初始化代码资源与所述第二初始化代码资源具有差异,则将所述第二初始化代码资源确定为所述具有差异化的第三代码资源。
6.根据权利要求5所述的多版本组件运行方法,其特征在于,在将所述第三代码资源从所述第二代码资源中迁移,得到第三组件之后,还包括:
将所述页面元素类型的第三代码资源以及所述逻辑元素类型的第三代码资源迁移至第一文件中;所述第一文件在执行时,用于动态的引入所述第一文件中包含的第三代码资源;以及,
将所述初始化类型的第三代码资源迁移至第二文件中;所述第二文件用于根据预设的配置项,对包含的所述初始化类型的第三代码资源进行注册激活;
将所述第一文件以及所述第二文件存储在所述当前版本的项目的目录中。
7.根据权利要求5所述的多版本组件运行方法,其特征在于,所述在与所述第二代码资源具有差异化的所述第一代码资源中,增加选择逻辑,包括:
获取所述第三组件在所述当前版本的项目中的存储地址;
将所述存储地址写入所述第一初始化代码资源的选择逻辑中。
8.一种多版本组件运行装置,其特征在于,所述装置包括:
获取模块,用于获取当前版本的项目所包含的第一组件的第一代码资源,以及上一版本的项目所包含的第二组件的第二代码资源;
确定模块,用于从所述第二代码资源中确定与所述第一代码资源具有差异化的第三代码资源;
迁移模块,用于将所述第三代码资源从所述第二代码资源中迁移,得到第三组件;
选择模块,用于在与所述第二代码资源具有差异化的所述第一代码资源中,增加选择逻辑;所述选择逻辑用于在具有差异化的所述第一组件初始化时,提供所述第三组件的引入选择;
运行模块,用于根据所述选择逻辑,运行所述当前版本的项目或所述上一版本的项目。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210240278.0A CN114579178A (zh) | 2022-03-10 | 2022-03-10 | 多版本组件运行方法、装置、终端设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210240278.0A CN114579178A (zh) | 2022-03-10 | 2022-03-10 | 多版本组件运行方法、装置、终端设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114579178A true CN114579178A (zh) | 2022-06-03 |
Family
ID=81779655
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210240278.0A Pending CN114579178A (zh) | 2022-03-10 | 2022-03-10 | 多版本组件运行方法、装置、终端设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114579178A (zh) |
-
2022
- 2022-03-10 CN CN202210240278.0A patent/CN114579178A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240045850A1 (en) | Systems and methods for database orientation transformation | |
JP2021002317A (ja) | アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体 | |
US9043757B2 (en) | Identifying differences between source codes of different versions of a software when each source code is organized using incorporated files | |
US20150363195A1 (en) | Software package management | |
CN110764775A (zh) | 一种应用程序整合的方法、装置、存储介质和服务器 | |
CN110780897A (zh) | 一种代码变更方法以及装置 | |
CN111124872A (zh) | 基于差异代码分析的分支检测方法、装置及存储介质 | |
US20230259358A1 (en) | Documentation enforcement during compilation | |
CN106557307B (zh) | 业务数据的处理方法及处理系统 | |
CN112596746B (zh) | 应用安装包生成方法、装置、计算机设备和存储介质 | |
CN111338626B (zh) | 一种界面渲染方法、装置、电子设备及介质 | |
CN111488144B (zh) | 一种数据处理方法以及设备 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
CN111338638A (zh) | 实现自动生成嵌入式软件部件之间通信的系统及其方法 | |
CN116414774A (zh) | 文件迁移方法、装置、设备及存储介质 | |
CN114579178A (zh) | 多版本组件运行方法、装置、终端设备及存储介质 | |
CN114625373A (zh) | 应用转换方法、装置、电子设备和存储介质 | |
CN108363614B (zh) | 一种应用的业务模块管理方法、装置及服务器 | |
CN112882698A (zh) | 开发环境的生成方法及装置、计算机存储介质及电子设备 | |
US11340897B1 (en) | Subject matter expert identification for computer software | |
CN113722538B (zh) | 一种界面动态渲染方法及装置 | |
CN112035119B (zh) | 一种数据删除方法及装置 | |
US20240103853A1 (en) | Code maintenance system | |
CN115167978A (zh) | 脚本执行方法、装置、电子设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |