技术领域
[0001] 本
申请涉及通信技术领域,尤其涉及一种程序打包方法、程序打包装置及计算机可读存储介质。
背景技术
[0002] 随着科学技术的发展,各种智能终端已经成为人们生活和工作中不可或缺的部分。智能终端通过搭载各种应用程序,能够实现各种各样的功能,满足用户的不同需求。
[0003] “快应用”是几家手机厂商基于
硬件平台共同推出的新型应用生态,用户不必下载安装,即点即用,能够享受到原生应用的性能体验。“快应用”使用前端技术栈开发与原生
渲染,兼具H5页面和原生应用的双重优点。
[0004] 目前,“快应用”的典型案例有微信的小程序,某些情况下,开发者需要将小程序划分成不同的子包,在
构建时打包成不同的分包,用户在使用时按需进行加载。
现有技术中,通过打包工具打包出的分包需要依赖于微信的引擎才能启动,而无法在其它平台下(例如浏览器)中运行。
发明内容
[0005] 本申请提供一种程序打包方法、程序打包装置及计算机可读存储介质,使得分包文件可以在各种平台运行。
[0006] 本申请第一方面提供一种程序打包方法,包括:
[0007] 获取分包的配置信息,其中,所述配置信息包含对本包所包含模
块的
指定和本包所调用模块的指定;
[0008] 根据所述分包的配置信息生成本包的模块调用方法,其中,所述模块调用方法用以指定本包所调用的各模块的加载方式;
[0009] 基于所述分包的配置信息和所述模块调用方法进行打包操作,得到分包文件,其中,所述分包文件包含本包的模块调用方法。
[0010] 本申请第二方面提供一种程序打包装置,包括:
[0011] 获取单元,用于获取分包的配置信息,其中,所述配置信息包含对本包所包含模块的指定和本包所调用模块的指定;
[0012] 生成单元,用于根据所述分包的配置信息生成本包的模块调用方法,其中,所述模块调用方法用以指定本包所调用的各模块的加载方式;
[0013] 打包单元,用于基于所述分包的配置信息和所述模块调用方法进行打包操作,得到分包文件,其中,所述分包文件包含本包的模块调用方法。
[0014] 本申请第三方面提供另一种程序打包装置,该程序打包装置包括:
[0015]
存储器、处理器及存储在上述存储器上并可在上述处理器上运行的
计算机程序,上述处理器执行上述计算机程序时,实现上述本申请
实施例第一方面提供的程序打包方法中的各步骤。
[0016] 本申请第四方面提供一种计算机可读存储介质,其上存储有计算机程序,上述计算机程序被处理器执行时,实现上述本申请实施例第一方面提供的程序打包方法中的各步骤。
[0017] 由上可见,本申请方案根据分包的配置信息生成本包的模块调用方法,并基于分包的配置信息和该模块调用方法进行打包操作,使得分包文件包含本包的模块调用方法。由于模块调用方法指定了本包所调用的各模块的加载方式,因此,通过本申请分案打包生成的分包文件,可以在各种平台下按照该分包文件中的模块调用方法运行,而无需依赖于特定平台中的引擎所指定的加载方式来运行。
附图说明
[0018] 图1为本申请提供的程序打包方法一个实施例流程示意图;
[0019] 图2为本申请提供的总包打包流程示意图;
[0020] 图3为本申请提供的程序打包装置一个实施例结构示意图;
[0021] 图4为本申请提供的程序打包装置另一个实施例结构示意图。
具体实施方式
[0022] 为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0023] 本申请实施例提供一种程序打包方法,该程序打包方法应用于程序打包装置,该程序打包装置可以集成在智能手机、
平板电脑、个人计算机等终端,或者,也可以是独立
电子装置,此处不做限定。
[0024] 请参阅图1,本实施例中的程序打包方法主要包括以下步骤:
[0025] 步骤101、获取分包的配置信息;
[0026] 本申请实施例中,上述述配置信息包含对本包所包含模块(例如.js文件,一个.js文件可称之为模块)的指定,所谓本包,是指当前需要进行调用模块和对调用方法进行打包操作的资源和代码等文件,而分包是指根据配置信息打包在一起的资源和代码块。从上述定义可获知,本包与分包的关系在于当前是对谁进行操作,若当前是对某个分包操作,则该分包就是一个本包。
[0027] 可选的,对本包所包含模块的指定可以是通过指定目录的方式对本包所包含模块进行指定,则被指定的目录下的所有模块为本包所包含的模块。举例说明,对于以目录“stage1”作为分包名称的分包stage1,可以通过如下代码指定目录stage1下的所有模块为分包stage1所包含的模块:
[0028]
[0029] 当然,也可以通过指定模块的方式直接进行指定,以上面例子为例,则可以通过如下代码对js1这个模块进行指定:
[0030]
[0031] 进一步,上述配置信息还可以包括如下几项:分包根目录、分包
别名、分包相对于分包根目录的页面路径以及指示分包是否为独立分包的标志位。
[0032] 在实际应用中,各个分包的配置信息可以由开发人员预先通过特定的
接口输入,除分包以外的其它数据可认为是主包的数据,这些数据被打包到主包中而生成主包文件。通常,主包文件包括:默认启动页面和分包所调用的公共资源。
[0033] 步骤102、根据上述分包的配置信息生成本包的模块调用方法;
[0034] 其中,上述模块调用方法用以指定本包所调用的各模块的加载方式。
[0035] 上述模块调用方法可解决如下两个问题:
[0036] 1、实现模块的加载(例如异步加载),避免加载模块时无响应;
[0037] 2、管理模块之间的依赖性,便于代码的编写和维护。
[0038] 由于上述配置信息包含对本包所包含模块的指定。作为本申请一个实施例,根据上述分包的配置信息生成本包的模块调用方法可以是:根据分包的配置信息获取本包所包含模块以及各模块之间的依赖关系,通过各模块之间的依赖关系获知各模块的加载顺序,生成本包的模块调用方法。
[0039] 可选的,上述模块调用方法为require方法(也可称为require()函数),则步骤102具体表现为:根据上述分包的配置信息生成本包的require方法。具体的,require方法的写法格式可如下:require([module],callback),由该格式可见,require方法包含两个参数,第一个参数[module]是一个数组,里面的成员就是要加载的模块,第二个参数callback,则是加载成功之后的回调函数。
[0040] 当然,require方法仅是上述模块调用方法的一种实现方式,在其它实施例中,上述模块调用方法也可以为define方法或其它方法,此处不做限定。
[0041] 步骤103、基于上述分包的配置信息和上述模块调用方法进行打包操作,得到分包文件;
[0042] 其中,上述分包文件包含本包的模块调用方法。
[0043] 在步骤103中,基于上述分包的配置信息将本包所调用的模块进行打包,并在打包过程中写入步骤102生成的模块调用方法,以得到分包文件。
[0044] 可选的,为了减小分包文件的大小,对于分包文件所调用的模块且该分包文件未包含的模块,本申请实施例中将这些模块称之为外包模块,可以不将这些模块打包在分包文件中(即将这些模块排除),由于通常开发者对模块的路径定义为相对路径即相对于所在分包根目录的路径,为了使得分包文件在调用外包模块时能够找到相关文件,本申请实施例中可以对本包所调用的外包模块的相对路径和该外包模块的绝对路径进行映射,并将映射得到的模块映射信息写入该本包中。具体的,本申请实施例中的程序打包方法还包括:
[0045] 当上述分包调用的模块包含外包模块时,生成上述分包的模块映射信息,其中,上述模块映射信息用以对本包所调用的外包模块的相对路径和上述外包模块的绝对路径进行映射,其中,上述外包模块是指本包内调用且本包未包含的模块,上述相对路径是指相对于本包根目录的路径,而外包模块的绝对路径是相当于外包模块的字典。步骤103可表现为:基于上述分包的配置信息和所述模块调用方法,对上述分包所包含的模块和上述分包的模块映射信息进行打包操作。
[0046] 对于模块为Js模块的场景,步骤103的打包操作可以使用Gulp控制打包流程,包括JS的转化、sourceMap的生成、错误处理、代码压缩和混淆等,并可使用Browserify对JS模块进行打包。
[0047] 进一步,在得到各分包文件和主包文件后,可以将得到的各分包文件和主包文件打包为总包文件。如图2所示,在打包得到分包文件1-N(在图2中以分包1.rpk、分包2.rpk……分包文件N.rpk进行示意)和主包文件(在图2中以main.rpk进行示意)后,可以将各分包文件和主包文件打包为总包文件(在图2中以[project name].rpk进行示意),其中,“rpk”为包文件的后缀名。
[0048] 需要说明的是,本申请实施例中的程序打包方法是针对模块的打包逻辑进行改进的方案,对于分包文件包含的其它非模块资源(css、图片、音视频等文件),可以参照已有技术(例如复制操作)加入分包文件即可。
[0049] 还需要说明的是,本申请实施例中的程序打包文件适用于对各个分包进行打包,对于主包的打包流程,可以参照已有技术实现,此处不再赘述。
[0050] 由上可见,本申请方案根据分包的配置信息生成本包的模块调用方法,并基于分包的配置信息和该模块调用方法进行打包操作,使得分包文件包含本包的模块调用方法。由于模块调用方法指定了本包所调用的各模块的加载方式,因此,通过本申请分案打包生成的分包文件,可以在各种平台下(例如V8环境搭建的平台)按照该分包文件中的模块调用方法运行,而无需依赖于特定平台中的引擎所指定的加载方式来运行。
[0051] 图3为本申请实施例提供一种程序打包装置。该程序打包装置可用于实现图1所示实施例中的程序打包方法。如图3所示,该程序打包装置主要包括:
[0052] 获取单元301,用于获取分包的配置信息,其中,所述配置信息包含对本包所包含模块的指定;
[0053] 生成单元302,用于根据上述分包的配置信息生成本包的模块调用方法,其中,上述模块调用方法用以指定本包所调用的各模块的加载方式;
[0054] 打包单元303,用于基于上述分包的配置信息和上述模块调用方法进行打包操作,得到分包文件,其中,上述分包文件包含本包的模块调用方法。
[0055] 可选的,上述程序打包装置还包括:
[0056] 映射单元,用于当上述分包调用的模块包含外包模块时,生成上述分包的模块映射信息,其中,上述模块映射信息用以对本包所调用的外包模块的相对路径和所述外包模块的绝对路径进行映射,其中,上述外包模块是指本包内调用且本包未包含的模块,上述相对路径是指相对于本包根目录的路径;
[0057] 打包单元303具体用于:基于上述分包的配置信息和上述模块调用方法,对上述分包所包含的模块和上述分包的模块映射信息进行打包操作。
[0058] 需要说明的是,以上图3示例的程序打包装置的实施方式中,各功能模块的划分仅是举例说明,实际应用中可以根据需要,例如相应硬件的配置要求或者
软件的实现的便利考虑,而将上述功能分配由不同的功能模块完成,即将程序打包装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。而且,在实际应用中,本实施例中的相应的功能模块可以是由相应的
硬件实现,也可以由相应的硬件执行相应的软件完成。本
说明书提供的各个实施例都可应用上述描述原则,以下不再赘述。
[0059] 本实施例提供的程序打包装置中各功能模块实现各自功能的具体过程,请参见上述方法实施例中描述的具体内容,此处不再赘述。
[0060] 由上可见,本申请实施例中的程序打包装置根据分包的配置信息生成本包的模块调用方法,并基于分包的配置信息和该模块调用方法进行打包操作,使得分包文件包含本包的模块调用方法。由于模块调用方法指定了本包所调用的各模块的加载方式,因此,通过本申请分案打包生成的分包文件,可以在各种平台下按照该分包文件中的模块调用方法运行,而无需依赖于特定平台中的引擎所指定的加载方式来运行。
[0061] 图4为本申请实施例提供一种程序打包装置。该程序打包装置可用于实现图1所示实施例中的程序打包方法。如图4所示,该程序打包装置主要包括:
[0062] 存储器401、处理器402及存储在存储器401上并可在处理器402上运行的计算机程序,处理器402执行该计算机程序时,实现图1所示实施例中的程序打包方法。
[0063] 进一步的,该程序打包装置还包括:
[0064] 至少一个输入设备403以及至少一个输出设备404。
[0065] 上述存储器401、处理器402、输入设备403以及输出设备404,通过总线405连接。
[0066] 其中,输入设备403具体可为摄像头、触控面板、物理按键或者
鼠标等等。输出设备404具体可为显示屏。
[0067] 存储器401可以是高速随机存取记忆体(RAM,Random Access Memory)存储器,也可为非不稳定的存储器(non-volatile memory),例如磁盘存储器。存储器401用于存储一组可执行程序代码,处理器402与存储器401耦合。
[0068] 由上可见,本申请实施例中的程序打包装置根据分包的配置信息生成本包的模块调用方法,并基于分包的配置信息和该模块调用方法进行打包操作,使得分包文件包含本包的模块调用方法。由于模块调用方法指定了本包所调用的各模块的加载方式,因此,通过本申请分案打包生成的分包文件,可以在各种平台下按照该分包文件中的模块调用方法运行,而无需依赖于特定平台中的引擎所指定的加载方式来运行。
[0069] 进一步的,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的程序打包装置中,该计算机可读存储介质可以是前述图3所示实施例中的存储器。该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现图1所示实施例中的程序打包方法。进一步的,该计算机可存储介质还可以是U盘、移动
硬盘、
只读存储器(ROM,Read-Only Memory)、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0070] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0071] 上述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0072] 另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0073] 上述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,
服务器,或者网络设备等)执行本申请各个实施例上述方法的全部或部分步骤。而前述的可读存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0074] 需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
[0075] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0076] 以上为对本申请所提供的程序打包方法、程序打包装置及计算机可读存储介质的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。