本公开提供了一种代码转换处理方法、装置、计算机设备和存储介质,其中,该方法包括:获取基于第一语法规范的第一代码包;创建模拟浏览器的上下文环境,并在上下文环境中,针对第一代码包执行第一语法规范下的模块导入语法,得到第一代码包对应的模块对象;基于得到的模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。本公开实施例通过将第一代码包转换为包括两种类型的导入和导出数据的第二代码包的方法,可以保证转换得到的第二代码包能够在新的浏览器中正确运行,提高了代码转换的准确性和合理性。性。性。
【技术实现步骤摘要】
一种代码转换处理方法、装置、计算机设备和存储介质
[0001]本公开涉及代码处理
,具体而言,涉及一种代码转换处理方法、装置、计算机设备和存储介质。
技术介绍
[0002]随着代码处理技术的发展,各种各样的代码语法规范相继出现,现有的浏览器均可支持ES Module语言规范的代码包运行。在ES Module语法规范提出之前,大多数代码包都是基于Common JS语法规范书写的,针对Common JS语法规范书写的代码包而言,在现有的浏览器运行时,可能存在语法兼容性的问题,导致代码运行失败或出错的情况。
[0003]因此,为了解决兼容性的问题,出现了将Common JS语法规范书写的代码包转化为符合ES Module语言规范的代码包的代码转换处理技术。但现有的代码转换处理技术转换得到的代码包,仍存在无法运行在现有的浏览器的问题。
技术实现思路
[0004]本公开实施例至少提供一种代码转换处理方法、装置、计算机设备和存储介质。
[0005]第一方面,本公开实施例提供了一种代码转换处理方法,包括:
[0006]获取基于第一语法规范的第一代码包;
[0007]创建模拟浏览器的上下文环境,并在所述上下文环境中,针对所述第一代码包执行所述第一语法规范下的模块导入语法,得到所述第一代码包对应的模块对象;
[0008]基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。
[0009]在一种可能的实施方式中,所述基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包,包括:
[0010]对得到的所述模块对象进行解构,确定所述模块对象的对象属性信息;
[0011]在将所述第一代码包转换为第二语法规范下的第二代码包的过程中,将所述对象属性信息编译成具名导出数据;
[0012]在初始转换的第二代码包中不包括所述模块对象在所述第二语法规范下的默认导出数据的情况下,对所述模块对象执行默认导出的编译过程;
[0013]其中,转换后的第二代码包中包括所述具名导出数据和所述模块对象对应的默认导出数据。
[0014]在一种可能的实施方式中,所述将所述对象属性信息编译成具名导出数据,包括:
[0015]利用抽象语法树的方式,将所述对象属性信息编译成具名导出数据。
[0016]在一种可能的实施方式中,对所述模块对象执行默认导出的编译过程,包括:
[0017]将所述模块对象作为所述第二代码包对应的默认对象;
[0018]基于所述第二语法规范,利用抽象语法树的方式,对所述默认对象执行默认导出的编译过程。
[0019]在一种可能的实施方式中,所述获取基于第一语法规范的第一代码包,包括:
[0020]接收客户端发起的针对所述第一代码包的语法规范转化请求;
[0021]基于所述语法规范转化请求,确定所述第一代码包的名称信息和位置信息;
[0022]从所述位置信息对应的数据位置处,获取与所述名称信息相匹配的所述第一代码包。
[0023]在一种可能的实施方式中,所述方法还包括:
[0024]采用预设的包管理工具,对所述第二代码包进行封装后发布。
[0025]在一种可能的实施方式中,对所述第二代码包进行封装后发布,包括:
[0026]将封装后的所述第二代码包上传至各个内容分发网络CDN,以便客户端在对应的CDN下载并运行所述第二代码包。
[0027]第二方面,本公开实施例还提供一种代码转换处理装置,包括:
[0028]获取模块,用于获取基于第一语法规范的第一代码包;
[0029]执行模块,用于创建模拟浏览器的上下文环境,并在所述上下文环境中,针对所述第一代码包执行所述第一语法规范下的模块导入语法,得到所述第一代码包对应的模块对象;
[0030]编译模块,用于基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。
[0031]在一种可能的实施方式中,所述编译模块,用于对得到的所述模块对象进行解构,确定所述模块对象的对象属性信息;
[0032]在将所述第一代码包转换为第二语法规范下的第二代码包的过程中,将所述对象属性信息编译成具名导出数据;
[0033]在初始转换的第二代码包中不包括所述模块对象在所述第二语法规范下的默认导出数据的情况下,对所述模块对象执行默认导出的编译过程;
[0034]其中,转换后的第二代码包中包括所述具名导出数据和所述模块对象对应的默认导出数据。
[0035]在一种可能的实施方式中,所述编译模块,用于利用抽象语法树的方式,将所述对象属性信息编译成具名导出数据。
[0036]在一种可能的实施方式中,所述编译模块,用于将所述模块对象作为所述第二代码包对应的默认对象;
[0037]基于所述第二语法规范,利用抽象语法树的方式,对所述默认对象执行默认导出的编译过程。
[0038]在一种可能的实施方式中,所述获取模块,用于接收客户端发起的针对所述第一代码包的语法规范转化请求;
[0039]基于所述语法规范转化请求,确定所述第一代码包的名称信息和位置信息;
[0040]从所述位置信息对应的数据位置处,获取与所述名称信息相匹配的所述第一代码包。
[0041]在一种可能的实施方式中,所述装置还包括:
[0042]发布模块,用于采用预设的包管理工具,对所述第二代码包进行封装后发布。
[0043]在一种可能的实施方式中,所述发布模块,用于将封装后的所述第二代码包上传
至各个内容分发网络CDN,以便客户端在对应的CDN下载并运行所述第二代码包。
[0044]第三方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
[0045]第四方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
[0046]关于上述代码转换处理装置、计算机设备、及计算机可读存储介质的效果描述参见上述代码转换处理方法的说明,这里不再赘述。
[0047]本公开实施例提供的代码转换处理方法、装置、计算机设备和存储介质,基于创建模拟浏览器的上下文环境,可以为第一代码包对应的代码的正常运行提供保障条件,通过在上下文环境中针对第一代码包执行第一语法规范下的模块导入语法,可以实现对第一代码包对应的代码的导入并运行,从而可以准确地得到第一代码包对应的代码运行完成时所导出的各个模块对象;通过对模块对象执行默认导出和具名导出本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种代码转换处理方法,其特征在于,包括:获取基于第一语法规范的第一代码包;创建模拟浏览器的上下文环境,并在所述上下文环境中,针对所述第一代码包执行所述第一语法规范下的模块导入语法,得到所述第一代码包对应的模块对象;基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。2.根据权利要求1所述的方法,其特征在于,所述基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包,包括:对得到的所述模块对象进行解构,确定所述模块对象的对象属性信息;在将所述第一代码包转换为第二语法规范下的第二代码包的过程中,将所述对象属性信息编译成具名导出数据;在初始转换的第二代码包中不包括所述模块对象在所述第二语法规范下的默认导出数据的情况下,对所述模块对象执行默认导出的编译过程;其中,转换后的第二代码包中包括所述具名导出数据和所述模块对象对应的默认导出数据。3.根据权利要求2所述的方法,其特征在于,所述将所述对象属性信息编译成具名导出数据,包括:利用抽象语法树的方式,将所述对象属性信息编译成具名导出数据。4.根据权利要求2所述的方法,其特征在于,对所述模块对象执行默认导出的编译过程,包括:将所述模块对象作为所述第二代码包对应的默认对象;基于所述第二语法规范,利用抽象语法树的方式,对所述默认对象执行默认导出的编译过程。5.根据权利要求1所述的方法,其特征在于,所述获取基于第一语法规范的第一代码包,包括:接收客户端发起的针对...
【专利技术属性】
技术研发人员:郑凡恺,刘诚,
申请(专利权)人:北京字节跳动网络技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。