应用程序的生成方法、装置、设备以及存储介质转让专利

申请号 : CN202211381717.6

文献号 : CN115617420B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李正晖陈帆王磊张红光

申请人 : 北京百度网讯科技有限公司

摘要 :

本公开提供了一种应用程序的生成方法、装置、设备以及存储介质,涉及计算机技术领域,尤其涉及软件开发技术领域和微前端技术领域。具体实现方案为:获取软件工程数据,其中,软件工程数据包括第一配置文件和第一启动文件;在第一配置文件中添加主工程模块和至少一个子工程模块;在第一启动文件中添加主工程模块的视图层挂载操作代码;以及对经过添加的软件工程数据进行打包,得到目标应用程序。

权利要求 :

1.一种应用程序的生成方法,包括:

获取软件工程数据,其中,所述软件工程数据包括第一配置文件和第一启动文件;

在所述第一配置文件中添加主工程模块和至少一个子工程模块;

在所述第一启动文件中添加所述主工程模块的视图层挂载操作代码;以及对经过添加的所述软件工程数据进行打包,得到目标应用程序;

所述方法还包括:获取主工程数据,其中,所述主工程数据包括第二配置文件、第二启动文件、第一入口文件、核心代码模块和至少一个基础设施功能代码模块;

在所述第二配置文件中添加第二模块联邦插件;

通过所述第二模块联邦插件,在所述第二配置文件中将所述第一入口文件设置为暴露状态;

通过所述第二模块联邦插件,在所述第二配置文件中将所述至少一个基础设施功能代码设置为共享状态;

在所述第二启动文件中添加所述第一入口文件和所述主工程模块的视图层挂载操作代码;以及对经过添加的所述主工程数据进行打包,得到所述主工程模块。

2. 根据权利要求1所述的方法,其中,所述在所述第一配置文件中添加主工程模块和至少一个子工程模块,包括:在所述第一配置文件中添加第一模块联邦插件;以及根据所述主工程模块的地址和所述至少一个子工程模块的地址,设置所述第一模块联邦插件的引入参数,以便在所述第一配置文件中添加主工程模块和至少一个子工程模块。

3. 根据权利要求1所述的方法,其中,所述在所述第一配置文件中添加主工程模块和至少一个子工程模块,包括:在所述第一配置文件中添加第一模块联邦插件;以及根据所述主工程模块的获取代码和所述至少一个子工程模块的获取代码,设置所述第一模块联邦插件的引入参数,以便在所述第一配置文件中添加所述主工程模块和所述至少一个子工程模块。

4.根据权利要求2或3所述的方法,其中,所述通过所述第二模块联邦插件,在所述第二配置文件中将所述至少一个基础设施功能代码设置为共享状态,包括:根据至少一个基础设施功能代码的标识,设置所述第一模块联邦插件的共享参数,并将所述至少一个基础设施功能代码的标识设置为全局唯一,其中,所述共享参数用于将所述至少一个基础设施功能代码配置为共享状态。

5.根据权利要求1所述的方法,还包括:

获取子工程数据,其中,所述子工程数据包括第三配置文件、第三启动文件和第二入口文件;

在所述第三配置文件中添加第三模块联邦插件;

通过所述第三模块联邦插件,在所述第三配置文件中添加暴露状态的第一入口文件;

通过所述第三模块联邦插件,在所述第三配置文件中添加共享状态的基础设施功能代码;

在所述第三启动文件中添加所述第二入口文件和所述子工程模块的视图层挂载操作代码;以及对经过添加的所述子工程数据进行打包,得到所述子工程模块。

6.根据权利要求1所述的方法,其中,所述在所述第一启动文件中添加所述主工程模块的视图层挂载操作代码,包括:在所述第一启动文件的尾部添加所述主工程模块的视图层挂载操作代码。

7.一种应用程序的生成装置,包括:

第一获取模块,用于获取软件工程数据,其中,所述软件工程数据包括第一配置文件和第一启动文件;

第一引入模块,用于在所述第一配置文件中添加主工程模块和至少一个子工程模块;

第二引入模块,用于在所述第一启动文件中添加所述主工程模块的视图层挂载操作代码;以及第一打包模块,用于对经过添加的所述软件工程数据进行打包,得到目标应用程序;

所述装置还包括:

第二获取模块,用于获取主工程数据,其中,所述主工程数据包括第二配置文件、第二启动文件、第一入口文件、核心代码模块和至少一个基础设施功能代码模块;

第三添加模块,用于在所述第二配置文件中添加第二模块联邦插件;

暴露状态设置模块,用于通过所述第二模块联邦插件,在所述第二配置文件中将所述第一入口文件设置为暴露状态;

共享状态设置模块,用于通过所述第二模块联邦插件,在所述第二配置文件中将所述至少一个基础设施功能代码设置为共享状态;

第三引入模块,用于在所述第二启动文件中添加所述第一入口文件和所述主工程模块的视图层挂载操作代码;

第二打包模块,用于对经过添加的所述主工程数据进行打包,得到所述主工程模块。

8. 根据权利要求7所述的装置,其中,所述第一引入模块包括:第一添加子模块,用于在所述第一配置文件中添加第一模块联邦插件;以及第一设置子模块,用于根据所述主工程模块的地址和所述至少一个子工程模块的地址,设置所述第一模块联邦插件的引入参数,以便在所述第一配置文件中添加所述主工程模块和所述至少一个子工程模块。

9. 根据权利要求7所述的装置,其中,所述第一引入模块包括:第二添加子模块,用于在所述第一配置文件中添加第一模块联邦插件;以及第二设置子模块,用于根据所述主工程模块的获取代码和所述至少一个子工程模块的获取代码,设置所述第一模块联邦插件的引入参数,以便在所述第一配置文件中添加所述主工程模块和所述至少一个子工程模块。

10.根据权利要求8或9所述的装置,其中,所述共享状态设置模块包括:第三设置子模块,用于根据至少一个基础设施功能代码的标识,设置所述第一模块联邦插件的共享参数,并将所述至少一个基础设施功能代码的标识设置为全局唯一,其中,所述共享参数用于将所述至少一个基础设施功能代码配置为共享状态。

11.根据权利要求7所述的装置,还包括:

第三获取模块,用于获取子工程数据,其中,所述子工程数据包括第三配置文件、第三启动文件和第二入口文件;

第四添加模块,用于在所述第三配置文件中添加第三模块联邦插件;

第四引入模块,用于通过所述第三模块联邦插件,在所述第三配置文件中添加暴露状态的第一入口文件;

第五引入模块,用于通过所述第三模块联邦插件,在所述第三配置文件中添加共享状态的基础设施功能代码;

第六引入模块,用于在所述第三启动文件中配置所述第二入口文件和所述子工程模块的视图层挂载操作代码;以及第三打包模块,用于对经过添加的所述子工程数据进行打包,得到所述子工程模块。

12.根据权利要求7所述的装置,其中,所述第二引入模块包括:第六引入子模块,用于在所述第一启动文件的尾部添加所述主工程模块的视图层挂载操作代码。

13. 一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1‑6中任一项所述的方法。

14.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1‑6中任一项所述的方法。

说明书 :

应用程序的生成方法、装置、设备以及存储介质

技术领域

[0001] 本公开涉及计算机技术领域,尤其涉及软件开发技术领域和微前端技术领域。

背景技术

[0002] 近年来,SaaS(Software‑as‑a‑Service,软件即服务)作为软件服务的应用模式日益成熟。很多软件服务提供方将研发出的软件服务打包成标品售卖给用户。但很多用户对于软件服务有自己的个性化定制需求,大量的定制化需求导致软件服务提供方需要投入较大的人力进行定制化开发。

发明内容

[0003] 本公开提供了一种应用程序的生成方法、装置、设备、存储介质以及程序产品。
[0004] 根据本公开的一方面,提供了一种应用程序的生成方法,包括:获取软件工程数据,其中,所述软件工程数据包括第一配置文件和第一启动文件;在所述第一配置文件中添加主工程模块和至少一个子工程模块;在所述第一启动文件中添加所述主工程模块的视图层挂载操作代码;以及对经过添加的所述软件工程数据进行打包,得到目标应用程序。
[0005] 根据本公开的另一方面,提供了一种应用程序的生成装置,包括:第一获取模块,用于获取软件工程数据,其中,所述软件工程数据包括第一配置文件和第一启动文件;第一引入模块,用于在所述第一配置文件中添加主工程模块和至少一个子工程模块;第二引入模块,用于在所述第一启动文件中添加所述主工程模块的视图层挂载操作代码;以及第一打包模块,用于对经过添加的所述软件工程数据进行打包,得到目标应用程序。
[0006] 本公开的另一个方面提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本公开实施例所示的方法。
[0007] 根据本公开实施例的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行本公开实施例所示的方法。
[0008] 根据本公开实施例的另一方面,提供了一种计算机程序产品,包括计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现本公开实施例所示方法的步骤。
[0009] 应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

[0010] 附图用于更好地理解本方案,不构成对本公开的限定。其中:
[0011] 图1是根据本公开实施例的应用程序的生成方法、装置、电子设备和存储介质的应用场景示意图;
[0012] 图2示意性示出了根据本公开的实施例的应用程序的生成方法的流程图;
[0013] 图3示意性示出了根据本公开另一实施例的应用程序的生成方法的流程图;
[0014] 图4示意性示出了根据本公开的实施例的对主工程数据进行打包,得到主工程模块的方法的流程图;
[0015] 图5示意性示出了根据本公开的实施例的子工程数据进行打包,得到子工程模块的方法的流程图;
[0016] 图6示意性示出了根据本公开的实施例的应用程序的生成方法的示意图;
[0017] 图7是用来实现本公开实施例的应用程序的生成装置的框图;以及
[0018] 图8示意性示出了可以用来实施本公开的实施例的示例电子设备的框图。

具体实施方式

[0019] 以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
[0020] 以下将结合图1对本公开提供的应用程序的生成方法和装置的应用场景进行描述。
[0021] 图1是根据本公开实施例的应用程序的生成方法、装置、电子设备和存储介质的应用场景示意图。需要注意的是,图1所示仅为可以应用本公开实施例的应用场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
[0022] 如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
[0023] 用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
[0024] 终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
[0025] 服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站或使用的应用提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
[0026] 需要说明的是,本公开实施例所提供的应用程序的生成方法一般可以由服务器105执行。相应地,本公开实施例所提供的应用程序的生成装置一般可以设置于服务器105中。本公开实施例所提供的应用程序的生成方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的应用程序的生成装置也可以设置于不同于服务器105且能够与终端设备101、102、
103和/或服务器105通信的服务器或服务器集群中。
[0027] 应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
[0028] 在本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供、公开和应用等处理,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。
[0029] 在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
[0030] 以下将结合图2对本公开提供的应用程序的生成方法进行描述。
[0031] 图2示意性示出了根据本公开的实施例的应用程序的生成方法的流程图。
[0032] 如图2所示,该应用程序的生成方法200包括在操作S210,获取软件工程数据。
[0033] 根据本公开的实施例,软件工程数据包括配置文件(config)和启动文件(bootstrap),其中,配置文件可以包括将软件工程数据打包时所需的配置信息。启动文件可以用于启动应用程序。为方便表述,以下将软件工程数据中的配置文件称为第一配置文件,将软件工程数据中的启动文件称为第一启动文件。
[0034] 可以理解的是,除了第一配置文件和第一启动文件之外,软件工程数据还可以包括其他数据,例如应用页面数据、资源数据等等,本公开对此不作具体限定。
[0035] 然后,在操作S220,在第一配置文件中添加主工程模块和至少一个子工程模块。
[0036] 根据本公开的实施例,可以在第一配置文件中添加主工程模块和至少一个子工程模块,来引入主工程模块和至少一个子工程模块,以使目标应用程序可以调用主工程模块和至少一个子工程模块。另外,在第一配置文件中添加主工程模块和至少一个子工程模块的基础上,还可以将主工程模块和至少一个子工程模块所对应的数据文件添加至软件工程数据中。其中,数据文件可以包括配置文件、启动文件、应用页面数据、资源数据等。或者,也可以将这些数据文件存储在软件工程数据之外的其他位置,在应用程序运行的过程中可以通过引入代码来获取该其他位置中的该数据文件。
[0037] 根据本公开的实施例,主工程模块和子工程模块可以分别为已打包的应用程序。主工程模块可以具有基础设施功能。子工程模块可以具有基础设施功能之外的其他扩展功能。子工程模块可以引入主工程模块,得到新的子工程模块,该新的子工程模块既有主工程模块的基础设施功能,也具有原子工程模块的其他扩展功能。
[0038] 其中,基础设施功能可以包括各子工程模块接入主工程模块所需引用的业务底层功能,例如可以包括用户信息管理功能、消息中心功能、素材管理管理功能等等。其中,用户信息管理功能可以用于在子工程模块与主工程模块之间的同步用户状态和与用户信息相关的操作等信息。消息中心功能可以用于控制子工程模块和主工程模块调用同一条通道来接收消息,还可以具有在子工程模块和主工程模块之间同步缓存消息、同步发送角色等功能。素材管理管理功能可以用于在子工程模块和主工程模块之间同步素材状态和与素材相关的操作等信息。
[0039] 其他扩展功能可以包括除基础设施功能之外想要接入主工程模块的业务功能,例如可以包括富文本编辑功能、图像编辑功能等等。其中,富文本编辑功能可以用于富文本进行编辑。图像编辑功能可以用于对图像进行编辑。
[0040] 在操作S230,在第一启动文件中添加主工程模块的视图层挂载操作代码。
[0041] 根据本公开的实施例,可以在第一启动文件中添加主工程模块的视图层挂载操作代码,来引入主工程模块的视图层挂载操作代码,以便在执行第一启动文件时可以调用视图层挂载操作代码。
[0042] 根据本公开的实施例,主工程模块的视图层挂载操作代码可以用于渲染主工程模块的视图层,并将视图层添加至对应的页面中。
[0043] 根据本公开的实施例,操作S220和S230之间的可以以任意顺序执行,本公开对此不作具体限定。
[0044] 在操作S240,对经过添加的软件工程数据进行打包,得到目标应用程序。
[0045] 根据本公开的实施例,可以根据利用打包工具来对软件工程数据进行打包,得到目标应用程序。示例性地,本实施例中,打包工具例如可以包括webpack。
[0046] 相关技术中,定制化开发软件的过程较为繁琐。
[0047] 根据本公开的实施例,主工程模块可以具有基础设施功能,子工程模块可以具有定制化的扩展功能。通过在第一配置文件中添加主工程模块和至少一个子工程模块,在第一启动文件中添加所述主工程模块的视图层挂载操作代码。然后对软件工程数据进行打包,可以得到具有基础设施功能和扩展功能的目标应用程序,由此可以简化定制化开发软件的过程。
[0048] 根据本公开的实施例,例如可以在第一配置文件中添加模块联邦插件,以下称为第一模块联邦插件。其中,模块联邦插件可以用于将多个独立构建的应用程序组成一个应用程序。然后利用第一模块联邦插件,在第一配置文件中添加主工程模块和至少一个子工程模块。
[0049] 例如,可以在第一配置文件中添加第一模块联邦插件。然后可以根据主工程模块的地址和至少一个子工程模块的地址,设置第一模块联邦插件的引入参数,以便在第一配置文件中添加主工程模块和至少一个子工程模块。其中,引入参数可以用于将软件工程数据之外的其他工程模块引入软件工程数据中,即将其他工程模块配置为目标应用程序可以调用的状态,即可调用状态。示例性地,本实施例中,所述引入参数可以用于将所述主工程模块和所述至少一个子工程模块配置为可调用状态。其中,主工程模块的地址指示了主工程模块的存放地址,子工程模块的地址指示了子工程模块的存放地址。或者,可以根据主工程模块的获取代码和至少一个子工程模块的获取代码,设置第一模块联邦插件的引入参数,以便在第一配置文件中添加主工程模块和至少一个子工程模块。其中,主工程模块的获取代码可以用于获取主工程模块的数据文件,子工程模块的获取代码可以用于获取子工程模块的数据文件。
[0050] 示例性地,本实施例中模块联邦插件例如可以包括webpack5中的Module Federation Plugin。基于此,例如可以在第一配置文件中设置plugins属性,向plugins属性传入Module Federation Plugin的实例,从而在第一配置文件中添加第一模块联邦插件。另外,Module Federation Plugin可以具有remote(引入)参数,可以将主工程模块的地址和至少一个子工程模块的地址传入该remote参数,或者可以将主工程模块的获取代码和至少一个子工程模块的获取代码传入该remote参数,以引入主工程模块和子工程模块。
[0051] 如果将各应用程序合并打包在一起,得到整合的应用程序,那么在整合后,每个应用程序各自的页面优化措施会失效。
[0052] 根据本公开的实施例,通过使用模块联邦插件,可以在应用程序中引入主工程模块和子工程模块,从而可以使应用程序具有主工程模块和子工程模块的功能,并且主工程模块和子工程模块原有的页面优化措施可以根据需要保留,其中,优化措施例如可以包括按需加载、路由懒加载、资源预加载等。另外,采用模块联邦插件的方式来引入主工程模块和子工程模块,无需过多优化就可得到较好的性能。
[0053] 根据本公开的实施例,例如可以在第一启动文件的尾部添加主工程模块的视图层挂载操作代码。通过在第一启动文件的尾部添加主工程模块的视图层挂载操作代码,可以使主工程模块的视图层挂载操作在启动的最后阶段执行。由于启动的最后阶段视图层挂载所需的各种代码逻辑已完成加载,因此视图层可以被正常挂载,从而可以避免因视图层挂载所需的代码逻辑未完成加载而导致挂载过程出错。
[0054] 根据本公开的实施例,在目标应用程序启动后,可以根据模块联邦插件的引入参数,调用主工程模块的入口文件和各子工程模块的入口文件,以加载各种代码逻辑,但不挂载视图层。然后根据第一启动文件尾部引入信息,引入主工程模块暴露的视图层挂载操作代码,并启动主工程模块的视图层挂载操作,从而可以使视图层可以被正常挂载,避免因视图层挂载所需的代码逻辑未完成加载而导致挂载过程出错。
[0055] 图3示意性示出了根据本公开另一实施例的应用程序的生成方法的流程图。
[0056] 如图3所示,该应用程序的生成方法300可以包括在操作S350,对主工程数据进行打包,得到主工程模块。
[0057] 在操作S360,对子工程数据进行打包,得到子工程模块。
[0058] 在操作S310,获取软件工程数据。
[0059] 然后,在操作S320,在第一配置文件中添加主工程模块和至少一个子工程模块。
[0060] 在操作S330,在第一启动文件中添加主工程模块的视图层挂载操作代码。
[0061] 在操作S340,对软件工程数据进行打包,得到目标应用程序。
[0062] 根据本公开的实施例,主工程数据例如可以包括基础设施功能代码,可以用于提供基础设施功能。基于此,主工程模块可以具有基础设施功能。基于此,子工程数据例如可以用于提供基础设施功能之外的扩展功能子工程模块可以具有基础设施功能之外的其他扩展功能。另外,子工程模块可以引入主工程模块,从而获取主工程模块的基础设施功能。
[0063] 根据本公开的实施例,操作S310~S340例如可以参考上文,在此不再赘述。
[0064] 根据本公开的实施例,操作S350和S360之间的可以以任意顺序执行,本公开对此不作具体限定。
[0065] 根据本公开的实施例,通过分别对主工程数据和子工程数据打包得到主工程模块和子工程模块,可以方便开发人员自由组合主工程模块和子工程模块,得到目标应用程序,另外可以减少开发过程中的人工成本和时间成本。例如,不同用户的功能需求可能不同,基于此,针对每个用户的功能需求,开发人员可以选择与该功能需求所匹配的子工程模块,然后根据这些子工程模块和主工程模块地生成满足该用户功能需求的定制化应用程序,不需要为每个用户单独开发一整个应用程序,从而可以简化定制化开发软件的过程。
[0066] 以下将结合图4对本公开提供的对主工程数据进行打包,得到主工程模块的方法进行描述。
[0067] 图4示意性示出了根据本公开的实施例的对主工程数据进行打包,得到主工程模块的方法的流程图。
[0068] 如图4所示,该对主工程数据进行打包,得到主工程模块的方法450包括在操作S451,获取主工程数据。
[0069] 根据本公开的实施例,主工程数据可以包括配置文件、启动文件、入口文件、核心代码模块和至少一个基础设施功能代码模块。为方便表述,以下将主工程数据中的配置文件称为第二配置文件,将主工程数据中的启动文件称为第二启动文件,将主工程数据中的入口文件称为第一入口文件。其中,第二配置文件可以包括将主工程数据打包时所需的配置信息。第二启动文件可以用于启动主工程模块。第一入口文件可以作为主工程模块启动时的入口。
[0070] 在操作S452,在第二配置文件中添加第二模块联邦插件。
[0071] 根据本公开的实施例,可以在第二配置文件中添加模块联邦插件,即第二模块联邦插件。其中,在第二配置文件中添加模块联邦插件的操作例如可以参考上文在第一配置文件中添加模块联邦插件,在此不再赘述。
[0072] 在操作S453,通过第二模块联邦插件,在第二配置文件中将第一入口文件设置为暴露状态。
[0073] 根据本公开的实施例,通过将第一入口文件设置为暴露状态,可以使主工程模块之外的其他应用可以访问该第一入口文件。
[0074] 在操作S454,通过第二模块联邦插件,在第二配置文件中将至少一个基础设施功能代码设置为共享状态。
[0075] 根据本公开的实施例,通过将基础设施功能代码设置为共享状态,可以使主工程模块之外的其他应用可以调用这些基础设施功能代码。
[0076] 根据本公开的实施例,基础设施功能代码可以用于调用主工程模块提供的基础设施功能,例如可以包括调用主工程模块提供的基础设施功能的API(应用程序接口)。基础设施功能代码例如可以以package(代码模块)的形式,例如npm‑package。
[0077] 根据本公开的实施例,例如根据至少一个基础设施功能代码的标识,设置第一模块联邦插件的共享参数,并将至少一个基础设施功能代码的标识设置为全局唯一。
[0078] 根据本公开的实施例,通过将主工程模块提供的基础设施功能拆分为package并API化,得到基础设置功能代码,然后将基础设置功能代码暴露给其他应用。子功能模块可跨技术栈调用主工程模块暴露的各项功能,从而可以简化接入方的开发过程。
[0079] 根据本公开的实施例,通过设置基础设施功能代码的标识为全局唯一,可以使全局依赖都是单例的形式,避免造成依赖冲突问题。另外,本实施例中,主工程模块和子工程模块之间可以传递状态信息,多个子功能模块之间也可以传递状态信息,其中,状态信息例如可以包括登录状态等。通过单例机制可以很好的统一多模块之间的状态管理。
[0080] 在操作S455,在第二启动文件中添加第一入口文件和主工程模块的视图层挂载操作代码。
[0081] 根据本公开的实施例,主工程模块的视图层挂载操作代码可以用于渲染主工程模块的视图层,并将视图层添加至对应的页面中。
[0082] 根据本公开的实施例,通过在第二启动文件中添加第一入口文件和主工程模块的视图层挂载操作代码,可以引入第一入口文件和主工程模块的视图层挂载操作代码,从而在启动主工程模块时,可以根据第一入口文件加载相应的调用代码逻辑。然后根据视图层挂载操作代码,渲染视图层,并加入页面中。
[0083] 根据本公开的实施例,操作S452~S454和S455之间的可以以任意顺序执行,本公开对此不作具体限定。
[0084] 在操作S456,对经过添加的主工程数据进行打包,得到主工程模块。
[0085] 根据本公开的实施例,可以根据利用打包工具来对主工程数据进行打包,得到主工程模块。示例性地,本实施例中,打包工具例如可以包括webpack。
[0086] 示例性地,本实施例中模块联邦插件例如可以包括webpack5中的Module Federation Plugin。基于此,例如可以在第二配置文件中设置Module Federation Plugin的exposes参数,将第一入口文件的存放路径传入exposes参数中,以将第一入口文件设置为暴露状态。例如可以在第二配置文件中设置Module Federation Plugin的shared参数,将至少一个基础设施功能代码所对应的package标识传入shared参数中,以将至少一个基础设施功能代码设置为共享状态。另外,可以为各package设置singleton参数,从而约束各package为全局唯一。
[0087] 以下将结合图5对本公开提供的对子工程数据进行打包,得到子工程模块的方法进行描述。
[0088] 图5示意性示出了根据本公开的实施例的子工程数据进行打包,得到子工程模块的方法的流程图。
[0089] 如图5所示,该对子工程数据进行打包,得到主工程模块的方法560包括在操作S561,获取子工程数据。
[0090] 根据本公开的实施例,子工程数据可以包括配置文件、启动文件和入口文件。为方便表述,以下将子工程数据中的配置文件称为第三配置文件,将子工程数据中的启动文件称为第三启动文件,将子工程数据中的入口文件称为第二入口文件。其中,第三配置文件可以包括将子工程数据打包时所需的配置信息。第三启动文件可以用于启动子工程模块。第二入口文件可以作为子工程模块启动时的入口。
[0091] 在操作S562,在第三配置文件中添加第三模块联邦插件。
[0092] 根据本公开的实施例,可以在第三配置文件中添加模块联邦插件,即第三模块联邦插件。其中,在第三配置文件中添加模块联邦插件的操作例如可以参考上文在第一配置文件中添加模块联邦插件,在此不再赘述。
[0093] 在操作S563,通过第三模块联邦插件,在第三配置文件中添加暴露状态的第一入口文件。
[0094] 根据本公开的实施例,通过将在第三配置文件中添加暴露状态的第一入口文件,可以使子工程模块可以访问该第一入口文件。
[0095] 在操作S564,通过第三模块联邦插件,在第三配置文件中添加共享状态的基础设施功能代码。
[0096] 根据本公开的实施例,通过在第三配置文件中配置共享状态的基础设施功能代码,可以使子工程模块可以调用这些基础设施功能代码。
[0097] 在操作S565,在第三启动文件中添加第二入口文件和子工程模块的视图层挂载操作代码。
[0098] 根据本公开的实施例,子工程模块的视图层挂载操作代码可以用于渲染子工程模块的视图层,并将视图层添加至对应的页面中。
[0099] 根据本公开的实施例,通过在第三启动文件中引入第二入口文件和子工程模块的视图层挂载操作代码,可以在启动子工程模块时,根据第二入口文件加载相应的调用代码逻辑。然后根据视图层挂载操作代码,渲染视图层,并加入页面中。
[0100] 根据本公开的实施例,操作S562~S564和S565之间的可以以任意顺序执行,本公开对此不作具体限定。
[0101] 在操作S566,对经过添加的子工程数据进行打包,得到子工程模块。
[0102] 根据本公开的实施例,可以利用打包工具来对子工程数据进行打包,得到子工程模块。示例性地,本实施例中,打包工具例如可以包括webpack。
[0103] 下面参考图6,结合具体实施例对上文所示的应用程序的生成方法做进一步说明。本领域技术人员可以理解,以下示例实施例仅用于理解本公开,本公开并不局限于此。
[0104] 图6示意性示出了根据本公开的实施例的应用程序的生成方法的示意图。
[0105] 在图6中示出了,在主工程模块代码层,可以将主工程模块的项目代码仓库转为多项目的形式,例如mono‑repo形式。核心模块可以作为项目本体,以下称为core,将基础设施功能从core中拆分,得到至少一个package,例如package1、package2等,每个基础设施功能对应一个package,在mono‑repo中统一管理。由此,可保障主工程模块内部的依赖版本统一。
[0106] 示例性地,本实施例中,在构建层,可以将主工程模块的依赖设置为webpack5。可以利用编辑器对主工程数据进行编辑,然后利用webpack5进行打包,得到主工程模块。其中,编辑器例如可以包括typescript、babel、esbuild等。
[0107] 例如,对于生产(production)环境,可以利用编辑器在主工程模块的webpack配置文件中添加Module Federation Plugin(模块联邦插件)。其中,Module Federation Plugin具有exposes、shared参数。然后可以将core的入口文件通过exposes参数暴露。其中,此入口文件不包含视图层挂载的操作,视图层挂载的操作由特定的package负责。将各基础设施功能对应的package通过shared参数统一提供给各接入方,并使用singleton约束各package全局唯一。另外,也可以将核心依赖在shared参数中约束全局唯一。核心依赖例如可以包括React、Vue等。
[0108] 对于开发(development)环境,可以利用编辑器为主工程模块创建bootstrap(启动)文件,在bootstrap文件中添加入口文件的引入代码并添加视图层挂载操作代码。接着可以将webpack的entry(入口)属性设为该bootstrap文件,从而可以保障项目本地可以正常启动。
[0109] 然后可以利用webpack5对编辑后的主工程数据进行打包,得到主工程模块。另外可以将主工程数据中的静态资源部署至CDN(内容分发网络)。后续,还可以将主工程模块作为标准应用提供给用户。
[0110] 根据本公开的实施例,在子工程模块代码层,子工程模块例如可以包括guest1、guest2......。在构建层,可以将子工程模块的依赖设置为webpack5。可以利用编辑器对子工程数据进行编辑,然后利用webpack5进行打包,得到子工程模块。其中,编辑器例如可以包括typescript、babel、esbuild等。
[0111] 例如,可以利用编辑器在子工程模块的配置文件中添加Module Federation Plugin,通过配置Module Federation Plugin的remote参数添加主工程模块的core,例如在remote参数中传入部署CDN中的主功能模块入口文件地址。并且可以创建bootstrap文件,将与子工程模块挂载视图层的代码移入bootstrap文件。然后在子工程模块入口文件中异步引入bootstrap文件。
[0112] 对于生产环境,可以利用编辑器将子工程模块的bootstrap文件头部通过module‑federation引入主工程模块暴露的core文件。可以在子工程模块的bootstrap文件尾部通过package引入主工程模块暴露的视图层挂载操作代码。
[0113] 对于开发环境,可以利用编辑器将子工程模块的bootstrap文件头部通过module‑federation引入主工程模块暴露的core文件。可以在子工程模块的bootstrap文件尾部通过package引入并启动主工程模块暴露的视图层挂载操作。启动子工程模块时也会将主工程模块项目在本地启动,如主工程模块暴露了其他基础设施功能,则子工程模块可以调用。由此,保障了子工程模块在本地可直接与主工程模块项目进行联调。
[0114] 接下来,可以利用编辑器将子工程模块的入口文件通过Module Federation Plugin的exposes参数暴露,通过shared参数引入需要调用的各主工程模块的package,使用singleton约束各package全局唯一。
[0115] 然后可以将子工程模块打包,得到子工程模块。例如将guest1打包为子工程模块1,将guest2打包为子工程模块2。
[0116] 在整合层,可以在整合项目(即整合主工程模块和各子工程模块的项目)的配置文件中,通过Module Federation Plugin的remote参数添加主工程模块和各子工程模块。在整合项目的bootstrap文件尾部通过package引入用于启动主工程模块暴露的视图层挂载操作的代码。然后可以对整合项目进行打包部署,即可看到所有基础设施功能和扩展功能以微前端的形式完成整合。后续如无新子工程模块接入则无需重新部署该整合项目,功能模块可独立更新静态资源以完成项目更新。
[0117] 例如,可以将主工程模块和子工程模块1整合,得到定制化应用1。将主工程模块和子工程模块2整合,得到定制化应用2。
[0118] 根据本公开的实施例,可以启动打包后的应用。在打包后的应用启动后,可以根据Module Federation Plugin的remote参数,先调用主工程模块和各子工程模块的入口文件,加载代码逻辑,但不挂载视图层。然后根据bootstrap文件尾部的package引入信息,引入与主工程模块暴露的视图层挂载操作对应的package,并根据该package启动主工程模块的视图层挂载操作。
[0119] 以下将结合图7对本公开提供的应用程序的生成装置进行描述。
[0120] 图7示意性示出了根据本公开实施例的应用程序的生成装置的框图。
[0121] 如图7所示,应用程序的生成装置700包括获取模块710、第一引入模块720、第二引入模块730和第一打包模块740。
[0122] 第一获取模块710,用于获取软件工程数据,其中,软件工程数据包括第一配置文件和第一启动文件。
[0123] 第一引入模块720,用于在第一配置文件中添加主工程模块和至少一个子工程模块。
[0124] 第二引入模块730,用于在第一启动文件中添加主工程模块的视图层挂载操作代码。
[0125] 第一打包模块740,用于对经过添加的软件工程数据进行打包,得到目标应用程序。
[0126] 根据本公开的实施例,第一引入模块可以包括:第一添加子模块,用于在第一配置文件中添加第一模块联邦插件;以及第一设置子模块,用于根据主工程模块的地址和至少一个子工程模块的地址,设置第一模块联邦插件的引入参数,以便在第一配置文件中添加主工程模块和至少一个子工程模块。
[0127] 根据本公开的实施例,第一引入模块可以包括:第二添加子模块,用于在第一配置文件中添加第一模块联邦插件;以及第二设置子模块,用于根据主工程模块的获取代码和至少一个子工程模块的获取代码,设置第一模块联邦插件的引入参数,以便在第一配置文件中添加主工程模块和至少一个子工程模块。
[0128] 根据本公开的实施例,上述应用程序的生成装置还可以包括:第二获取模块,用于获取主工程数据,其中,主工程数据包括第二配置文件、第二启动文件、第一入口文件、核心代码模块和至少一个基础设施功能代码模块;第三添加模块,用于在第二配置文件中添加第二模块联邦插件;暴露状态设置模块,用于通过第二模块联邦插件,在第二配置文件中将第一入口文件设置为暴露状态;共享状态设置模块,用于通过第二模块联邦插件,在第二配置文件中将至少一个基础设施功能代码设置为共享状态;第三引入模块,用于在第二启动文件中添加第一入口文件和主工程模块的视图层挂载操作代码;第二打包模块,用于对经过添加的主工程数据进行打包,得到主工程模块。
[0129] 根据本公开的实施例,共享状态设置模块可以包括:第三设置子模块,用于根据至少一个基础设施功能代码的标识,设置第一模块联邦插件的共享参数,并将至少一个基础设施功能代码的标识设置为全局唯一,其中,共享参数用于将至少一个基础设施功能代码配置为共享状态。
[0130] 根据本公开的实施例,上述应用程序的生成装置还可以包括:第三获取模块,用于获取子工程数据,其中,子工程数据包括第三配置文件、第三启动文件和第二入口文件;第四添加模块,用于在第三配置文件中添加第三模块联邦插件;第四引入模块,用于通过第三模块联邦插件,在第三配置文件中添加暴露状态的第一入口文件;第五引入模块,用于通过第三模块联邦插件,在第三配置文件中添加共享状态的基础设施功能代码;第六引入模块,用于在第三启动文件中配置第二入口文件和子工程模块的视图层挂载操作代码;以及第三打包模块,用于对经过添加的子工程数据进行打包,得到子工程模块。
[0131] 根据本公开的实施例,第二引入模块可以包括:第六引入子模块,用于在第一启动文件的尾部添加主工程模块的视图层挂载操作代码。
[0132] 根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0133] 图8示意性示出了可以用来实施本公开的实施例的示例电子设备800的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0134] 如图8所示,设备800包括计算单元801,其可以根据存储在只读存储器(ROM)802中的计算机程序或者从存储单元808加载到随机访问存储器(RAM)803中的计算机程序,来执行各种适当的动作和处理。在RAM 803中,还可存储设备800操作所需的各种程序和数据。计算单元801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
[0135] 设备800中的多个部件连接至I/O接口805,包括:输入单元806,例如键盘、鼠标等;输出单元807,例如各种类型的显示器、扬声器等;存储单元808,例如磁盘、光盘等;以及通信单元809,例如网卡、调制解调器、无线通信收发机等。通信单元809允许设备800通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0136] 计算单元801可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元801的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元801执行上文所描述的各个方法和处理,例如应用程序的生成方法。例如,在一些实施例中,应用程序的生成方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元808。在一些实施例中,计算机程序的部分或者全部可以经由ROM 802和/或通信单元809而被载入和/或安装到设备800上。当计算机程序加载到RAM 803并由计算单元801执行时,可以执行上文描述的应用程序的生成方法的一个或多个步骤。备选地,在其他实施例中,计算单元801可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行应用程序的生成方法。
[0137] 本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0138] 用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0139] 在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0140] 为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0141] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
[0142] 计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序来产生客户端和服务器的关系。
[0143] 服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务(″Virtual Private Server″,或简称″VPS″)中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。
[0144] 应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0145] 上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。