CN112052011A - 小程序的合包方法、装置、电子设备及介质 - Google Patents
小程序的合包方法、装置、电子设备及介质 Download PDFInfo
- Publication number
- CN112052011A CN112052011A CN202011076888.9A CN202011076888A CN112052011A CN 112052011 A CN112052011 A CN 112052011A CN 202011076888 A CN202011076888 A CN 202011076888A CN 112052011 A CN112052011 A CN 112052011A
- Authority
- CN
- China
- Prior art keywords
- file
- project
- project file
- package
- address information
- 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/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/22—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供了一种小程序的合包方法、装置、电子设备及介质,涉及计算机领域。该方法包括:获取待合并的主包的路径地址信息以及至少一个分包的路径地址信息;基于主包的路径地址信息获取主包的第一项目文件,以及基于各分包的路径地址信息获取各分包的第二项目文件,第一项目文件与各第二项目文件是依据相同的项目文件开发规范开发得到的,对于第一项目文件和各第二项目文件中的任意一个项目文件,该项目文件的业务代码包含于指定文件中;将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中;基于合并后的第一项目文件,得到目标小程序。本申请实施例实现了降低人力资源的消耗,提高程序开发效率。
Description
技术领域
本申请涉及计算机技术领域,具体而言,本申请涉及一种小程序的合包方法、装置、电子设备及介质。
背景技术
随着计算机技术的不断发展,应用程序的种类逐渐增多,用户需要的应用程序也逐渐增多,小程序凭借其不需要下载安装即可使用的特点,越来越受到用户的欢迎。
在小程序的开发过程中,小程序的功能会越来越多,体积也会随着版本的迭代越来越大,将小程序分成多个包从服务器下载,既可以加快渲染的速度,也可以提高加载的速度。每一个分包的小程序包含一个主包和至少一个分包,各分包和主包之间可以独立开发。通常情况下,独立开发的各分包和主包需要人工修改代码,以将各分包合并入主包中,该过程会增加额外的人力资源,降低开发效率。
发明内容
本申请提供了一种可以降低人力资源的小程序的合包方法、装置、电子设备及介质。
第一方面,提供了一种小程序的合包方法,该方法包括:
获取待合并的主包的路径地址信息以及至少一个分包的路径地址信息;
基于主包的路径地址信息获取主包的第一项目文件,以及基于各分包的路径地址信息获取各分包的第二项目文件,第一项目文件与各第二项目文件是依据相同的项目文件开发规范开发得到的,对于第一项目文件和各第二项目文件中的任意一个项目文件,该项目文件的业务代码包含于指定文件中;
将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中;
基于合并后的第一项目文件,得到目标小程序。
第二方面,提供了一种小程序的合包装置,该装置包括:
获取路径地址模块,用于获取待合并的主包的路径地址信息以及至少一个分包的路径地址信息;
获取项目文件模块,用于基于主包的路径地址信息获取主包的第一项目文件,以及基于各分包的路径地址信息获取各分包的第二项目文件,第一项目文件与各第二项目文件是依据相同的项目文件开发规范开发得到的,对于第一项目文件和各第二项目文件中的任意一个项目文件,该项目文件的业务代码包含于指定文件中;
合并指定文件模块,用于将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中;
得到小程序模块,用于基于合并后的第一项目文件,得到目标小程序。
第三方面,提供了一种电子设备,该电子设备包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中一个或多个应用程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序配置用于:执行根据第一方面所示的小程序的合包方法。
第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所示的小程序的合包方法。
本申请提供的技术方案带来的有益效果是:
本申请提供了一种小程序的合包方法、装置、电子设备及介质,与现有技术相比,本申请获取主包的第一项目文件,以及各分包的第二项目文件,对于第一项目文件以及第二项目文件中的任一个项目文件,项目文件的业务代码包含于指定文件中,通过将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中,实现了将各分包的业务代码自动化合并至主包的业务代码中,可以减少人力资源的消耗,提高程序开发效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种小程序的合包方法的流程示意图;
图2为本申请实施例提供的一种小程序的合包装置的结构示意图;
图3为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
本申请实施例提供了一种小程序的合包方法,可以由任一终端设备执行,该终端设备可以为手机、笔记本电脑、台式电脑、平板电脑等,也可以由服务器或者服务器集群执行,服务器集群包括至少两个服务器,为便于描述,下面将从终端设备的角度详细介绍本申请实施例。
本申请实施例中,终端设备可以从服务器中获取包的项目文件(主包的第一项目文件和/或任一个、任几个分包的第二项目文件),其中,包的项目文件可以云存储至服务器中,也可以存储在基于云技术的数据库中。
云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
云技术(Cloud technology)基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。
作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为IaaS(Infrastructure as a Service,基础设施即服务)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作系统)、存储设备、网络设备。
按照逻辑功能划分,在IaaS(Infrastructure as a Service,基础设施即服务)层上可以部署PaaS(Platform as a Service,平台即服务)层,PaaS层之上再部署SaaS(Software as a Service,软件即服务)层,也可以直接将SaaS部署在IaaS上。PaaS为软件运行的平台,如数据库、web容器等。SaaS为各式各样的业务软件,如web门户网站、短信群发器等。一般来说,SaaS和PaaS相对于IaaS是上层。
云计算(cloud computing)指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。云计算是网格计算(Grid Computing)、分布式计算(DistributedComputing)、并行计算(Parallel Computing)、效用计算(Utility Computing)、网络存储(Network StorageTechnologies)、虚拟化(Virtualization)、负载均衡(Load Balance)等传统计算机和网络技术发展融合的产物。
随着互联网、实时数据流、连接设备多样化的发展,以及搜索服务、社会网络、移动商务和开放协作等需求的推动,云计算迅速发展起来。不同于以往的并行分布式计算,云计算的产生从理念上将推动整个互联网模式、企业管理模式发生革命性的变革。
云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID,ID entity)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(RAID,Redundant Array of Independent Disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML(Extensible MarkupLanguage,即可扩展标记语言);或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依据所用查询语言来作分类,例如SQL(结构化查询语言(Structured QueryLanguage)、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。
图1为本申请实施例提供的一种小程序的合包方法的流程示意图,如图1所示,该方法可以包括步骤S101-步骤S104。其中,本申请实施例的执行主体可以是任一电子设备,在实际应用中,本申请实施例所提供的方案可以实现为一应用程序,或者是实现为一小程序的合包工具(简称为小程序合包工具),基于该应用程序或该小程序合包工具能够实现将主包和至少一个分包进行自动化合成,得到一个小程序。
步骤S101,获取待合并的主包的路径地址信息以及至少一个分包的路径地址信息。
其中,包(主包或者任一分包)的路径地址信息为存储该包的路径地址,包可以存储在终端设备中,也可以存储在与终端设备通信连接的设备中,例如服务器。
本申请实施例中,包的路径地址信息可以为超文本传输协议(HyperTextTransfer Protocol,HTTP)地址,也可以为分布式版本控制系统(简称Git)地址,还可以为目录列表等,在此不做限定。
在具体应用的过程中,用户(如技术人员)可以将主包的路径地址信息以及各分包的路径地址信息配置在预设的配置文件中,终端设备上安装有小程序合包工具,该合包工具可以通过获取该预设的配置文件,从该预设的配置文件中读取主包的路径地址信息和各分包的路径地址信息。其中,预设的配置文件可以为mp2.config.json文件。
在一种可能的实现方式中,配置文件中可以包括mainPackage文件和subPackages文件,mainPackage文件用于配置主包的路径地址信息,该路径地址信息可以为Git地址、HTTP地址等地址信息,subPackages文件用于配置各分包的路径地址信息,该路径地址信息也可以为Git地址、HTTP地址等地址信息,主包和各分包的路径地址信息的形式可以不同,也可以相同。例如,主包的路径地址信息可以为Git地址,一个分包的路径地址信息可以为HTTP地址,另一个分包的路径地址信息为Git地址。
用户也可以直接输入主包的路径地址信息和/或各分包的路径地址信息,例如,用户可以通过命令行输入主包的路径地址信息和/或各分包的路径地址信息。
在一种可能的实现方式中:当命令行是mp2 merge时,表明当前目录为主包所在的目录,不需要重新下载主包;当命令行是mp2 merge main packageA packageB时,表明用户指定了主包和各分包,其中,第一个参数为main,表示主包,第二个参数为packageA,表示一个分包,第三个参数为packageB,表示另一个分包,其中,该命令行中参数的数量与主包和分包的数量和相等,即分包对应的参数可以不止上述所示的两个,还可以为一个,或者至少三个,当各个参数为包所在的目录时,合包工具可以直接使用目录合包,可以不需要重新下载主包和各分包;当命令行是mp2merge--config./mp2.config.json时,表明用户指定了预设的配置文件mp2.config.json文件,合包工具可以从mp2.config.json文件中获取到主包的路径地址信息和各分包的路径地址信息。
需要说明的是,在小程序项目的开发过程中,可以将小程序项目拆分为主包的项目和至少一个分包的项目,可以将主包的项目和各分包的项目同时开发,加快开发速度。一般情况下,主包的项目中包含小程序重要的代码,通常由小程序开发团队自己开发,分包的项目主要包含小程序的一个或者几个功能的实现代码,将小程序项目拆分成主包的项目和至少一个分包的项目,可以实现小程序功能的复用,即一个小程序中可以包含另一个小程序的功能,即可以将一个小程序的分包合并至另一个小程序中。为了加快开发速度,分包的项目可以是由小程序开发团队的合作伙伴开发。
步骤S102,基于主包的路径地址信息获取主包的第一项目文件,以及基于各分包的路径地址信息获取各分包的第二项目文件。
其中,第一项目文件与各第二项目文件是依据相同的项目文件开发规范开发得到的,对于第一项目文件和各第二项目文件中的任意一个项目文件,该项目文件的业务代码包含于指定文件中。
本申请实施例中,第一项目文件与各第二项目文件是依据相同的项目文件开发规范开发得到的,项目文件开发规范中规定了需要将项目文件的业务代码包含于指定文件中,这样开发人员在项目开发时,基于项目文件开发规范,将主包的业务代码包含于第一项目文件的指定文件中,以及将各分包的业务代码包含于各第二项目文件的指定文件中。进一步的,在对第一项目文件和各第二项目文件进行合包时,可以准确地将各第二项目文件的指定文件中的内容合并至第一项目文件的指定文件中,即准确地将主包的业务代码与各分包的业务代码合并在一起。
项目文件开发规范可以是一个目录结构规范,目录结构规范中的任一个目录指定了该目录可以添加的内容,便于合包工具在合包时,不丢失项目文件中的业务代码。
一种可能的实现方式中,项目文件开发规范可以为:
其中,在上述项目文件开发规范中,可以将业务代码包含于入口文件即app.js文件、全局配置文件即app.json文件、以及项目名称文件即project-name文件中,即指定文件包括app.js文件、app.json文件以及project-name文件,其中,project-name文件包含于包文件即packages文件中,因此,指定文件也可以包括app.js文件、app.json文件以及packages文件。
需要说明的是,上述项目文件开发规范仅为示例性的,在实际开发的过程中,可以与上述项目文件开发规范完全不同,或者完全相同,或者部分相同,在此不做限定。
本申请实施例中,当包(主包或者任一分包)的路径地址信息为Git地址时,合包工具可以通过git clone命令从Git仓库中获取到Git地址对应的包的项目文件,例如,通过git clone git地址,直接访问Git仓库中git地址对应的文件,从而获取git地址对应的包的项目文件;当包的路径地址信息为HTTP地址时,合包工具可以从HTTP地址对应的网页中下载得到包的项目文件,其中,当包的项目文件为压缩包,例如,Zip(一种数据压缩文件格式)包时,需要对压缩包进行解压。
当然,在实际应用的过程中,包的路径地址信息不限于Git地址和HTTP地址,还可以为其他的地址,合包工具可以根据包的任一种形式的路径地址信息,获取到包的项目文件。
步骤S103,将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中。
在小程序项目开发的过程中,需要严格遵守项目文件开发规范进行开发,合包工具在合包时,需要将各第二项目文件的指定文件中的内容合并至第一项目文件的指定文件中,即开发得到的项目文件中,业务代码包含于指定文件中,合包工具在合包时,可以准确地将各第二项目文件的指定文件中的内容合并至第一项目文件的指定文件中,即准确地将各分包的业务代码与主包的业务代码进行合并,可以避免运行出错的问题。
步骤S104,基于合并后的第一项目文件,得到目标小程序。
本申请实施例中,可以基于合并后的第一项目文件,得到目标小程序,例如,可以将合并后的第一项目文件作为目标小程序的项目文件,也可以对合并后的第一项目文件进行处理,得到目标小程序的项目文件。
本申请实施例提供了一种小程序的合包方法,与现有技术相比,本申请实施例可以获取主包的第一项目文件,以及各分包的第二项目文件,对于第一项目文件以及第二项目文件中的任一个项目文件,项目文件的业务代码包含于指定文件中,通过将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中,实现了将各分包的业务代码自动化合并至主包的业务代码中,可以减少人力资源的消耗,提高程序开发效率。
本申请实施例的另一种可能实现方式,各第二项目文件是依据开发模板开发得到的,开发模板是基于删除了源代码中敏感代码部分的第一项目文件得到的基本代码的项目模板。
本申请实施例中,由于第一项目文件与各第二项目文件是依据相同的项目文件开发规范开发得到的,因此,不需要将第一项目文件的源代码提供给分包的开发团队,而是将项目文件开发规范提供给分包的开发团队。
进一步地,可以将项目文件开发规范和开发模板提供给分包的开发团队,为防止敏感代码泄露等安全问题,可以将第一项目文件的源代码中的敏感代码删除,得到删除敏感代码部分的第一项目文件,根据删除敏感代码部分的第一项目文件,得到基本代码的项目模板。
在开发小程序项目的各分包项目时,可以利用基本代码的项目模板开发得到各分包的第二项目文件。由于项目模板中仅包含主包对应的基本代码,不包含主包对应的敏感代码,可以防止敏感代码泄露、敏感数据丢失等问题,有效保证了代码的安全性。
本申请实施例的另一种可能实现方式,指定文件也可以包括app.js文件、app.json文件以及packages文件。其中,app.js文件即为入口文件,app.json文件即为全局配置文件,packages文件即为包文件。下面将按照实施方式A1-实施方式A3的顺序一一进行说明,其中,实施方式A1-A3的顺序仅是描述的顺序,该顺序不具有实质上的先后顺序。
实施方式A1:指定文件包括包文件,即packages文件。
其中,步骤S103中,将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中,具体可以包括:将各第二项目文件的包文件中的内容合并到第一项目文件的包文件中。
本申请实施例中,项目文件(第一项目文件或者任一第二项目文件)的packages文件中的内容为项目文件的主要业务代码部分,可以将各第二项目文件的packages文件中的内容合并到第一项目文件的packages文件中。
其中,由上述项目文件开发规范可知,packages文件中的内容包括project-name文件,project-name文件中包括组件components文件、页面pages文件、图片images文件等。
在将任一第二项目文件的packages文件中的内容合并到第一项目文件的packages文件中时,可以将该第二项目文件的project-name文件及第二项目文件的project-name文件中包含的组件components文件、页面pages文件、图片images文件等文件,添加至第一项目文件的project-name文件下方,得到并列的两个project-name文件。
即,本质上是将各个第二项目文件的project-name文件复制到packages文件中,使得packages文件中包括第一项目文件的project-name文件和各第二项目文件的project-name文件。
具体地,在实际执行实现方式A1时,可以先将第一项目文件复制至指定的文件夹中,然后再将各第二项目文件的packages文件中的内容合并到第一项目文件的packages文件中。
实现方式A2:指定文件包括入口文件,即app.js文件。
其中,步骤S103中,将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中,具体可以包括步骤S1031。
步骤S1031,将各第二项目文件的入口文件中的全局变量信息合并至第一项目文件的入口文件中的全局变量信息中。
本申请实施例中,全局变量可以是某对象函数创建的,也可以是在小程序任何地方创建的。全局变量可以被小程序所有对象或函数引用。
其中,小程序的全局变量定义在app.js文件中的全局变量globalData对象中,全局变量信息包括globalData对象中包含的全局变量。在本申请实施例中,需要将各第二项目文件的app.js文件中的globalData对象中的全局变量,合并至第一项目文件的app.js文件中的globalData对象中。
其中,对于globalData对象中的任一个全局变量,该全局变量可以被预先配置在预设的配置文件中,也可以是用户通过命令行直接输入的全局变量。
在一种可能的实现方式中,当命令行是mp2 merge--global"{'version':'1.0.0'}"时,表明用户输入了全局变量,其中,{'version':'1.0.0'}为该全局变量的json格式。
具体地,步骤S1031,将各第二项目文件的入口文件中的全局变量信息合并至第一项目文件的入口文件中的全局变量信息中,具体可以包括步骤S10311-步骤S10315。
步骤S10311,将第一项目文件的入口文件中的文本内容转换为抽象语法树,以及将各第二项目文件的入口文件中的文本内容转换为抽象语法树。
本申请实施例中,抽象语法树(Abstract Syntax Tree,AST)是源代码语法结构的一种抽象表示。对于第一项目文件的入口文件以及各第二项目的入口文件,针对任一个入口文件,可以先读取入口文件的文本内容,利用预设转换工具将入口文件的文本内容转换为AST,AST上的各个节点分别对应于文本内容中的各个对象,AST上的任一个节点包括节点的类型、节点的名称、以及子节点信息等。
其中,预设转换工具可以为任一能将文本内容转换为AST的工具,本申请实施例中不对预设转换工具做限定。作为一个具体实现方式,预设转换工具可以为Babel提供的工具,Babel为一种编译器,通过该工具可以是Babel中的Babylon,Babylon可以根据BabelAST的格式,将app.js文件中的文本内容转换为AST。
步骤S10312,将各抽象语法树中的全局变量对象对应的语法树部分进行合并,得到合并后的语法树部分。
本申请实施例中,对于第一项目文件的抽象语法树以及各第二项目文件的抽象语法树,可以从各抽象语法树中提取全局变量对象对应的语法树部分,即提取globalData对象对应的语法树部分,并将提取的globalData对象对应的语法树部分进行合并,得到合并后的语法树部分。
步骤S10313,以合并后的语法树部分替换第一项目文件的抽象语法树中的全局变量对象对应的语法树部分,得到处理后的第一项目文件的抽象语法树。
本申请实施例中,在利用合并后的语法树部分替换第一项目文件的抽象语法树中的globalData对象对应的语法树部分时,可以将合并后的语法树部分写入已提取全局变量对象对应的语法树部分的第一项目文件的抽象语法树,得到处理后的第一项目文件的抽象语法树。
步骤S10314,将处理后的第一项目文件的抽象语法树转换为文本内容。
步骤S10315,将转换得到的文本内容替换第一项目文件的入口文件中的文本内容。
本申请实施例中,可以将处理后的第一项目文件的抽象语法树转换为文本内容,利用转换得到的文本内容替换第一项目文件的入口文件中的文本内容,使得替换后得到的第一项目文件的入口文件中的文本内容中,包括各第二项目文件的globalData对象中的全局变量。
需要说明的是,在将各第二项目文件的入口文件中的全局变量信息合并至第一项目文件的入口文件中的全局变量信息中时,除可以利用步骤S10311-步骤S10315中的方式合并外,还可以利用正则方式进行合并。
具体地,在利用正则方式进行合并时,对于第一项目文件的app.js文件和各第二项目文件的app.js文件中的任一个app.js文件,可以先读取app.js文件中的文本内容,该文本内容为字符串形式的文本内容,可以从文本内容中匹配出符合预设的正则表达式的字符串,例如,符合预设的正则表达式的字符串可以为globalData:{...}的字符串,然后,将符合预设的正则表达式的字符串转换为预设属性的表现形式的字符串,预设属性可以为value属性,value属性的表现形式的字符串可以为var globalData={...}形式的字符串,然后通过eval函数,将预设属性的表现形式的字符串转换为目标对象,该目标对象可以为js对象。各个app.js文件均提取到目标对象后,将各目标对象进行合并操作,并利用合并后的目标对象替换第一项目文件的app.js文件中的目标对象。其中,eval函数可以求取输入的字符串的值。
实现方式A3:指定文件包括全局配置文件,即app.json文件。
其中,步骤S103,将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中,具体可以包括步骤S1032-步骤S1034。
步骤S1032,确定第一项目文件的全局配置文件中的子包的路径地址信息,以及各第二项目文件的全局配置文件中的子包的路径地址信息。
本申请实施例中,对于第一项目文件的app.json文件以及各第二项目文件的app.json文件,任一个app.json文件中包括subpackages字段,subpackages字段表示子包的路径地址信息。
可以读取app.json文件中的内容,确定app.json文件中的subpackages字段,从而确定app.json文件中的子包的路径地址信息。
具体地,可以利用node.js(一个JavaScript运行环境)的json解析函数将app.json文件中的内容解析成js对象,从解析的js对象中提取具有subpackages属性的js对象的值。
步骤S1033,将确定的各个子包的路径地址信息进行合并,得到合并后的路径地址信息。
本申请实施例中,可以将第一项目文件中的subpackages字段与第二项目文件中的subpackages字段进行合并,得到合并后的路径地址信息。
具体地,可以将提取的各个具有subpackages属性的js对象的值进行合并,得到合并后的具有subpackages属性的js对象的值,即得到合并后的路径地址信息。
步骤S1034,利用合并后的路径地址信息,替换第一项目文件的全局配置文件中的子包的路径地址信息。
本申请实施例中,可以利用合并后的具有subpackages属性的js对象的值替换第一项目文件的app.json文件中的具有subpackages属性的js对象的值,并将替换后的js对象转换为app.json文件中的内容,使得第一项目文件的app.json文件中包括各个第二项目文件的app.json文件中的subpackages字段。
本申请实施例的另一种可能实现方式,步骤S104中,基于合并后的第一项目文件,得到目标小程序,具体可以包括:
获取目标程序标识信息;将合并后的第一项目文件中的程序标识信息替换为目标程序标识信息;基于替换后的第一项目文件,得到目标小程序。
本申请实施例中,目标程序标识信息可以预先配置在预设的配置文件中,例如,在mp2.config.json文件中配置有appid,该appid即为目标程序标识信息。合包工具可以从预设的配置文件中获取目标程序标识信息。
用户也可以通过命令行直接输入目标程序标识信息。在一种可能的实现方式中:当命令行是mp2 merge--appid<appid>时,表明用户输入了目标小程序标识。
在实际执行的过程中,可以确定合并后的第一项目文件中的项目配置project.config.json文件,读取project.config.json文件中的内容,并将读取的内容转换为js对象,利用获取的目标程序标识信息替换js对象中的appid字段,将替换后的js对象转换为project.config.json文件中的内容,得到替换后的project.config.json文件,从而得到替换后的第一项目文件。
进一步地,可以将替换后的第一项目文件,作为目标小程序,或者对替换后的第一项目文件进行处理,得到目标小程序。
其中,将合并后的第一项目文件中的程序标识信息替换为目标程序标识信息,其目的是便于接入持续集成(Continuous Integration,CI)流程,实现自动化部署小程序的作用。其中,每一个程序标识信息对应着不同的环境或者小程序主体,为了便于程序标识信息与环境之间的统一,可以在将合并后的第一项目文件中的程序标识信息替换为目标程序标识信息的同时,获取目标程序环境信息,并将合并后的第一项目文件中的程序环境信息替换为目标程序环境信息。
其中,目标程序环境信息可以预先配置在预设的配置文件中,作为一个可能的实现方式,可以在mp2.config.json文件中配置env字段,即配置目标程序环境信息。
用户也可以通过命令行输入目标程序环境信息。例如,当命令行是mp2 merge--env dev时,表明用户输入了目标程序环境信息。
当然,在实际执行时,命令行不仅包括上述实施例所涉及的命令,还可以包括其他的命令,例如,当命令行是mp2 merge--cdn时,表明可以将图片资源上传至内容分发网络(Content Delivery Network,CDN),其中,图片资源是项目文件中的图片,通常情况下,第一项目文件中的重要图片需要放在第一项目文件中,第一项目文件中除重要图片之外的其他图片、以及各第二项目文件中的全部或者部分图片可以上传至CDN,以减小项目文件的体积;当命令行是mp2 merge--preview时,表明可以预览合并后的第一项目文件;当命令行是mp2 merge--open时,表明可以打开合并后的第一项目文件;当命令行是mp2 merge--upload时,表明可以将合并后的第一项目文件上传至小程序的服务器中。
上述实施例从方法步骤的角度详细介绍了小程序的合包方法,下述将介绍本申请的具体实现方式,具体如下所示:
本申请实施例中,可以预先将主包的路径地址信息、各分包的路径地址信息、全局变量信息、目标程序环境信息以及目标程序标识信息配置在预设的配置文件中,该配置文件可以如下所示:
可以从上述配置文件中提取主包的路径地址信息以及各个分包的路径地址信息,基于主包的路径地址信息获取主包的第一项目文件,以及基于各分包的路径地址信息获取各分包的第二项目文件。
其中,主包的第一项目文件包括包文件、入口文件、全局配置文件、项目配置文件等。例如,主包的第一项目文件如下所示:
分包的第二项目文件包括包文件、入口文件、全局配置文件、项目配置文件等。例如,分包的第二项目文件如下所示(下面示出了分包packageA,其他分包与packageA相似,在此不再一一列举):
本申请实施例中,可以先将各第二项目文件的packages文件中的内容合并到第一项目文件的packages文件中,然后再将各第二项目文件的app.js文件中的全局变量信息合并至第一项目文件的app.js文件中的全局变量信息中,之后再将各第二项目文件的app.json文件中的子包的路径地址信息,合并到第一项目文件的app.json文件中,之后将第一项目文件的project.config.json中的程序标识信息替换为目标程序标识信息,基于最终得到的第一项目文件,得到目标小程序。
其中,合并部分和替换部分的具体实现方式,可以详见上述实施例的相关说明,在此不再赘述。
上述从方法步骤的角度具体阐述了小程序的合包方法,下面从虚拟模块的角度介绍小程序的合包装置,具体如下所示:
本申请实施例提供了一种小程序的合包装置,如图2所示,该小程序的合包装置20可以包括:获取路径地址模块201、获取项目文件模块202、合并指定文件模块203以及得到小程序模块204,其中,
获取路径地址模块201,用于获取待合并的主包的路径地址信息以及至少一个分包的路径地址信息。
获取项目文件模块202,用于基于主包的路径地址信息获取主包的第一项目文件,以及基于各分包的路径地址信息获取各分包的第二项目文件,第一项目文件与各第二项目文件是依据相同的项目文件开发规范开发得到的,对于第一项目文件和各第二项目文件中的任意一个项目文件,该项目文件的业务代码包含于指定文件中。
合并指定文件模块203,用于将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中。
得到小程序模块204,用于基于合并后的第一项目文件,得到目标小程序。
本申请实施例的另一种可能实现方式,各第二项目文件是依据开发模板开发得到的,开发模板是基于删除了源代码中敏感代码部分的第一项目文件得到的基本代码的项目模板。
本申请实施例的另一种可能实现方式,指定文件包括包文件;
合并指定文件模块203具体用于:
将各第二项目文件的包文件中的内容合并到第一项目文件的包文件中。
本申请实施例的另一种可能实现方式,指定文件包括入口文件;
合并指定文件模块203具体用于:
将各第二项目文件的入口文件中的全局变量信息合并至第一项目文件的入口文件中的全局变量信息中。
本申请实施例的另一种可能实现方式,合并指定文件模块203在将各第二项目文件的入口文件中的全局变量信息合并至第一项目文件的入口文件中的全局变量信息中时,具体用于:
将第一项目文件的入口文件中的文本内容转换为抽象语法树,以及将各第二项目文件的入口文件中的文本内容转换为抽象语法树;
将各抽象语法树中的全局变量对象对应的语法树部分进行合并,得到合并后的语法树部分;
以合并后的语法树部分替换第一项目文件的抽象语法树中的全局变量对象对应的语法树部分,得到处理后的第一项目文件的抽象语法树;
将处理后的第一项目文件的抽象语法树转换为文本内容;
将转换得到的文本内容替换第一项目文件的入口文件中的文本内容。
本申请实施例的另一种可能实现方式,指定文件包括全局配置文件;
合并指定文件模块203具体用于:
确定第一项目文件的全局配置文件中的子包的路径地址信息,以及各第二项目文件的全局配置文件中的子包的路径地址信息;
将确定的各个子包的路径地址信息进行合并,得到合并后的路径地址信息;
利用合并后的路径地址信息,替换所述第一项目文件的全局配置文件中的子包的路径地址信息。
本申请实施例的另一种可能实现方式,得到小程序模块204具体用于:
获取目标程序标识信息;
将合并后的第一项目文件中的程序标识信息替换为目标程序标识信息;
基于替换后的第一项目文件,得到目标小程序。
本实施例的小程序的合包装置20可执行本申请方法实施例提供的一种小程序的合包方法,其实现原理相类似,此处不再赘述。
本申请实施例提供了一种小程序的合包装置,与现有技术相比,本申请实施例获取主包的第一项目文件,以及各分包的第二项目文件,对于第一项目文件以及第二项目文件中的任一个项目文件,项目文件的业务代码包含于指定文件中,通过将各第二项目文件的指定文件中的内容合并到第一项目文件的指定文件中,实现了将各分包的业务代码自动化合并至主包的业务代码中,可以减少人力资源的消耗,提高程序开发效率。
上述从虚拟模块的角度介绍本申请的小程序的合包装置,下面从实体装置的角度介绍本申请的电子设备。
本申请实施例提供了一种电子设备,如图3所示,图3所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI总线或EISA总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图3中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述任一方法实施例所示的内容。
本申请实施例提供了一种电子设备,本申请实施例中的电子设备包括:一个或多个处理器;存储器;一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据方法实施例所示的小程序的合包方法。
上述从实体装置的角度介绍本申请的电子设备,下面从存储介质的角度介绍本申请的计算机可读存储介质。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (10)
1.一种小程序的合包方法,其特征在于,包括:
获取待合并的主包的路径地址信息以及至少一个分包的路径地址信息;
基于所述主包的路径地址信息获取主包的第一项目文件,以及基于各分包的路径地址信息获取各分包的第二项目文件,所述第一项目文件与各所述第二项目文件是依据相同的项目文件开发规范开发得到的,对于所述第一项目文件和各所述第二项目文件中的任意一个项目文件,该项目文件的业务代码包含于指定文件中;
将各所述第二项目文件的指定文件中的内容合并到所述第一项目文件的指定文件中;
基于合并后的第一项目文件,得到目标小程序。
2.根据权利要求1所述的方法,其特征在于,各所述第二项目文件是依据开发模板开发得到的,所述开发模板是基于删除了源代码中敏感代码部分的第一项目文件得到的基本代码的项目模板。
3.根据权利要求1所述的方法,其特征在于,所述指定文件包括包文件;
所述将各所述第二项目文件的指定文件中的内容合并到所述第一项目文件的指定文件中,包括:
将各所述第二项目文件的包文件中的内容合并到所述第一项目文件的包文件中。
4.根据权利要求1所述的方法,其特征在于,所述指定文件包括入口文件;
所述将各所述第二项目文件的指定文件中的内容合并到所述第一项目文件的指定文件中,包括:
将各所述第二项目文件的入口文件中的全局变量信息合并至所述第一项目文件的入口文件中的全局变量信息中。
5.根据权利要求4所述的方法,其特征在于,所述将各所述第二项目文件的入口文件中的全局变量信息合并至所述第一项目文件的入口文件中的全局变量信息中,包括:
将所述第一项目文件的入口文件中的文本内容转换为抽象语法树,以及将各所述第二项目文件的入口文件中的文本内容转换为抽象语法树;
将各所述抽象语法树中的全局变量对象对应的语法树部分进行合并,得到合并后的语法树部分;
以合并后的语法树部分替换所述第一项目文件的抽象语法树中的全局变量对象对应的语法树部分,得到处理后的第一项目文件的抽象语法树;
将处理后的第一项目文件的抽象语法树转换为文本内容;
将转换得到的文本内容替换所述第一项目文件的入口文件中的文本内容。
6.根据权利要求1所述的方法,其特征在于,所述指定文件包括全局配置文件;
所述将各所述第二项目文件的指定文件中的内容合并到所述第一项目文件的指定文件中,包括:
确定所述第一项目文件的全局配置文件中的子包的路径地址信息,以及各所述第二项目文件的全局配置文件中的子包的路径地址信息;
将确定的各个子包的路径地址信息进行合并,得到合并后的路径地址信息;
利用所述合并后的路径地址信息,替换所述第一项目文件的全局配置文件中的子包的路径地址信息。
7.根据权利要求1所述的方法,其特征在于,所述基于合并后的第一项目文件,得到目标小程序包括:
获取目标程序标识信息;
将所述合并后的第一项目文件中的程序标识信息替换为所述目标程序标识信息;
基于替换后的第一项目文件,得到目标小程序。
8.一种小程序的合包装置,其特征在于,包括:
获取路径地址模块,用于获取待合并的主包的路径地址信息以及至少一个分包的路径地址信息;
获取项目文件模块,用于基于所述主包的路径地址信息获取主包的第一项目文件,以及基于各分包的路径地址信息获取各分包的第二项目文件,所述第一项目文件与各所述第二项目文件是依据相同的项目文件开发规范开发得到的,对于所述第一项目文件和各所述第二项目文件中的任意一个项目文件,该项目文件的业务代码包含于指定文件中;
合并指定文件模块,用于将各所述第二项目文件的指定文件中的内容合并到所述第一项目文件的指定文件中;
得到小程序模块,用于基于合并后的第一项目文件,得到目标小程序。
9.一种电子设备,其特征在于,其包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据权利要求1~7任一项所述的小程序的合包方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1~7任一项所述的小程序的合包方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011076888.9A CN112052011A (zh) | 2020-10-10 | 2020-10-10 | 小程序的合包方法、装置、电子设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011076888.9A CN112052011A (zh) | 2020-10-10 | 2020-10-10 | 小程序的合包方法、装置、电子设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112052011A true CN112052011A (zh) | 2020-12-08 |
Family
ID=73605678
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011076888.9A Pending CN112052011A (zh) | 2020-10-10 | 2020-10-10 | 小程序的合包方法、装置、电子设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052011A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685097A (zh) * | 2020-12-28 | 2021-04-20 | 北京达佳互联信息技术有限公司 | 一种数据处理方法和装置 |
CN113721912A (zh) * | 2021-08-31 | 2021-11-30 | 浩鲸云计算科技股份有限公司 | 基于umi的微前端框架的动态分包和合包方法 |
CN113821252A (zh) * | 2021-09-24 | 2021-12-21 | 深圳市明源云采购科技有限公司 | 小程序的构建方法、装置、终端设备以及存储介质 |
-
2020
- 2020-10-10 CN CN202011076888.9A patent/CN112052011A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112685097A (zh) * | 2020-12-28 | 2021-04-20 | 北京达佳互联信息技术有限公司 | 一种数据处理方法和装置 |
CN112685097B (zh) * | 2020-12-28 | 2024-04-16 | 北京达佳互联信息技术有限公司 | 一种数据处理方法和装置 |
CN113721912A (zh) * | 2021-08-31 | 2021-11-30 | 浩鲸云计算科技股份有限公司 | 基于umi的微前端框架的动态分包和合包方法 |
CN113821252A (zh) * | 2021-09-24 | 2021-12-21 | 深圳市明源云采购科技有限公司 | 小程序的构建方法、装置、终端设备以及存储介质 |
CN113821252B (zh) * | 2021-09-24 | 2024-05-14 | 深圳市明源云采购科技有限公司 | 小程序的构建方法、装置、终端设备以及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11163739B2 (en) | Database table format conversion based on user data access patterns in a networked computing environment | |
EP3483740B1 (en) | Method, device and system for stream computation | |
CN109716320B (zh) | 用于事件处理的图生成的方法、系统、介质和应用处理引擎 | |
US10353913B2 (en) | Automating extract, transform, and load job testing | |
CN108510082B (zh) | 对机器学习模型进行处理的方法及装置 | |
US10275278B2 (en) | Stream processing task deployment using precompiled libraries | |
US10402424B1 (en) | Dynamic tree determination for data processing | |
US8799299B2 (en) | Schema contracts for data integration | |
CN112052011A (zh) | 小程序的合包方法、装置、电子设备及介质 | |
US10257109B2 (en) | Cloud-based content management system | |
US10846102B2 (en) | Loading dependency library files from a shared library repository in an application runtime environment | |
EP3279816A1 (en) | Data analysis processing method, apparatus, computer device, and storage medium | |
CN111651219A (zh) | 一种多模块项目配置文件管理的方法及设备 | |
CN111125064A (zh) | 一种生成数据库模式定义语句的方法和装置 | |
CN107113231A (zh) | 将基于图形的计算卸载到后端设备 | |
US9342527B2 (en) | Sharing electronic file metadata in a networked computing environment | |
CN109063059A (zh) | 行为日志处理方法、装置及电子设备 | |
CN115202663A (zh) | 一种数据处理方法、装置和存储介质 | |
US11042530B2 (en) | Data processing with nullable schema information | |
CN112416865A (zh) | 基于大数据的文件处理方法和装置 | |
US10162626B2 (en) | Ordered cache tiering for program build files | |
US11893015B2 (en) | Optimizing query performance in virtual database | |
US9235382B2 (en) | Input filters and filter-driven input processing | |
CN109634586B (zh) | 一种分阶段的ima配置数据开发方法 | |
CN110023923B (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 |