CN113608746B - 一种代码转换处理方法、装置、计算机设备和存储介质 - Google Patents

一种代码转换处理方法、装置、计算机设备和存储介质 Download PDF

Info

Publication number
CN113608746B
CN113608746B CN202110938396.4A CN202110938396A CN113608746B CN 113608746 B CN113608746 B CN 113608746B CN 202110938396 A CN202110938396 A CN 202110938396A CN 113608746 B CN113608746 B CN 113608746B
Authority
CN
China
Prior art keywords
code
code packet
module
default
grammar
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.)
Active
Application number
CN202110938396.4A
Other languages
English (en)
Other versions
CN113608746A (zh
Inventor
郑凡恺
刘诚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Douyin Vision Co Ltd
Douyin Vision Beijing Co Ltd
Original Assignee
Beijing ByteDance Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing ByteDance Network Technology Co Ltd filed Critical Beijing ByteDance Network Technology Co Ltd
Priority to CN202110938396.4A priority Critical patent/CN113608746B/zh
Publication of CN113608746A publication Critical patent/CN113608746A/zh
Application granted granted Critical
Publication of CN113608746B publication Critical patent/CN113608746B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

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

一种代码转换处理方法、装置、计算机设备和存储介质
技术领域
本公开涉及代码处理技术领域,具体而言,涉及一种代码转换处理方法、装置、计算机设备和存储介质。
背景技术
随着代码处理技术的发展,各种各样的代码语法规范相继出现,现有的浏览器均可支持ES Module语言规范的代码包运行。在ES Module语法规范提出之前,大多数代码包都是基于Common JS语法规范书写的,针对Common JS语法规范书写的代码包而言,在现有的浏览器运行时,可能存在语法兼容性的问题,导致代码运行失败或出错的情况。
因此,为了解决兼容性的问题,出现了将Common JS语法规范书写的代码包转化为符合ES Module语言规范的代码包的代码转换处理技术。但现有的代码转换处理技术转换得到的代码包,仍存在无法运行在现有的浏览器的问题。
发明内容
本公开实施例至少提供一种代码转换处理方法、装置、计算机设备和存储介质。
第一方面,本公开实施例提供了一种代码转换处理方法,包括:
获取基于第一语法规范的第一代码包;
创建模拟浏览器的上下文环境,并在所述上下文环境中,针对所述第一代码包执行所述第一语法规范下的模块导入语法,得到所述第一代码包对应的模块对象;
基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。
在一种可能的实施方式中,所述基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包,包括:
对得到的所述模块对象进行解构,确定所述模块对象的对象属性信息;
在将所述第一代码包转换为第二语法规范下的第二代码包的过程中,将所述对象属性信息编译成具名导出数据;
在初始转换的第二代码包中不包括所述模块对象在所述第二语法规范下的默认导出数据的情况下,对所述模块对象执行默认导出的编译过程;
其中,转换后的第二代码包中包括所述具名导出数据和所述模块对象对应的默认导出数据。
在一种可能的实施方式中,所述将所述对象属性信息编译成具名导出数据,包括:
利用抽象语法树的方式,将所述对象属性信息编译成具名导出数据。
在一种可能的实施方式中,对所述模块对象执行默认导出的编译过程,包括:
将所述模块对象作为所述第二代码包对应的默认对象;
基于所述第二语法规范,利用抽象语法树的方式,对所述默认对象执行默认导出的编译过程。
在一种可能的实施方式中,所述获取基于第一语法规范的第一代码包,包括:
接收客户端发起的针对所述第一代码包的语法规范转化请求;
基于所述语法规范转化请求,确定所述第一代码包的名称信息和位置信息;
从所述位置信息对应的数据位置处,获取与所述名称信息相匹配的所述第一代码包。
在一种可能的实施方式中,所述方法还包括:
采用预设的包管理工具,对所述第二代码包进行封装后发布。
在一种可能的实施方式中,对所述第二代码包进行封装后发布,包括:
将封装后的所述第二代码包上传至各个内容分发网络CDN,以便客户端在对应的CDN下载并运行所述第二代码包。
第二方面,本公开实施例还提供一种代码转换处理装置,包括:
获取模块,用于获取基于第一语法规范的第一代码包;
执行模块,用于创建模拟浏览器的上下文环境,并在所述上下文环境中,针对所述第一代码包执行所述第一语法规范下的模块导入语法,得到所述第一代码包对应的模块对象;
编译模块,用于基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。
在一种可能的实施方式中,所述编译模块,用于对得到的所述模块对象进行解构,确定所述模块对象的对象属性信息;
在将所述第一代码包转换为第二语法规范下的第二代码包的过程中,将所述对象属性信息编译成具名导出数据;
在初始转换的第二代码包中不包括所述模块对象在所述第二语法规范下的默认导出数据的情况下,对所述模块对象执行默认导出的编译过程;
其中,转换后的第二代码包中包括所述具名导出数据和所述模块对象对应的默认导出数据。
在一种可能的实施方式中,所述编译模块,用于利用抽象语法树的方式,将所述对象属性信息编译成具名导出数据。
在一种可能的实施方式中,所述编译模块,用于将所述模块对象作为所述第二代码包对应的默认对象;
基于所述第二语法规范,利用抽象语法树的方式,对所述默认对象执行默认导出的编译过程。
在一种可能的实施方式中,所述获取模块,用于接收客户端发起的针对所述第一代码包的语法规范转化请求;
基于所述语法规范转化请求,确定所述第一代码包的名称信息和位置信息;
从所述位置信息对应的数据位置处,获取与所述名称信息相匹配的所述第一代码包。
在一种可能的实施方式中,所述装置还包括:
发布模块,用于采用预设的包管理工具,对所述第二代码包进行封装后发布。
在一种可能的实施方式中,所述发布模块,用于将封装后的所述第二代码包上传至各个内容分发网络CDN,以便客户端在对应的CDN下载并运行所述第二代码包。
第三方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述代码转换处理装置、计算机设备、及计算机可读存储介质的效果描述参见上述代码转换处理方法的说明,这里不再赘述。
本公开实施例提供的代码转换处理方法、装置、计算机设备和存储介质,基于创建模拟浏览器的上下文环境,可以为第一代码包对应的代码的正常运行提供保障条件,通过在上下文环境中针对第一代码包执行第一语法规范下的模块导入语法,可以实现对第一代码包对应的代码的导入并运行,从而可以准确地得到第一代码包对应的代码运行完成时所导出的各个模块对象;通过对模块对象执行默认导出和具名导出的两种编译过程,可以分别得到两种与第二语法规范相匹配的导出数据和导入数据,进而得到包含两种导出和导入数据的第二代码包,能够保证在新的浏览器环境中运行第二代码包时,使用第二语法规范对应的任一种模块导入或导出方法运行第二代码包,都可以存在对应的导入或导出数据,保证了第二代码包的正确运行,得到正确的模块对象,与利用现有代码转换处理技术转换得到的代码包,仍存在无法运行在现有的浏览器的问题相比,通过将第一代码包转换为包括两种类型的导入和导出数据的第二代码包的方法,可以保证第二代码包能够在新的浏览器中正确运行,提高了代码转换的准确性和合理性。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种代码转换处理方法的流程图;
图2示出了本公开实施例所提供的一种代码转换处理的具体实施流程图;
图3示出了本公开实施例所提供的一种代码转换处理装置的示意图;
图4示出了本公开实施例所提供的一种计算机设备结构示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
另外,本公开实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
经研究发现,随着代码处理技术的发展,各种各样的代码语法规范相继出现,现有的浏览器均可支持ES Module语言规范的代码包运行。在ES Module语法规范提出之前,大多数代码包都是基于Common JS语法规范书写的,针对Common JS语法规范书写的代码包而言,在现有的浏览器运行时,可能存在语法兼容性的问题,导致代码运行失败或出错的情况。
因此,为了解决兼容性的问题,出现了将Common JS语法规范书写的代码包转化为符合ES Module语言规范的代码包的代码转换处理技术。但现有的代码转换处理技术转换得到的代码包,仍存在无法运行在现有的浏览器的问题。
基于上述研究,本公开提供了一种代码转换处理方法、装置、计算机设备和存储介质,基于创建模拟浏览器的上下文环境,可以为第一代码包对应的代码的正常运行提供保障条件,通过在上下文环境中针对第一代码包执行第一语法规范下的模块导入语法,可以实现对第一代码包对应的代码的导入并运行,从而可以准确地得到第一代码包对应的代码运行完成时所导出的各个模块对象;通过对模块对象执行默认导出和具名导出的两种编译过程,可以分别得到两种与第二语法规范相匹配的导出数据和导入数据,进而得到包含两种导出和导入数据的第二代码包,能够保证在新的浏览器环境中运行第二代码包时,使用第二语法规范对应的任一种模块导入或导出方法运行第二代码包,都可以存在对应的导入或导出数据,保证了第二代码包的正确运行,得到正确的模块对象,与利用现有代码转换处理技术转换得到的代码包,仍存在无法运行在现有的浏览器的问题相比,通过将第一代码包转换为包括两种类型的导入和导出数据的第二代码包的方法,可以保证第二代码包能够在新的浏览器中正确运行,提高了代码转换的准确性和合理性。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
需要说明的是,本公开实施例中所提到的特定名词包括:
ES modules(简称ESM):是JavaScript官方的标准化模块系统。
Common JS(简称CJS):是JavaScript语言的一种模块规范,早于ES modules。
Node.js:是一个基于Chrome V8引擎的JavaScript运行时。
AST:abstract syntax code,抽象语法树,是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说是抽象的,抽象表示把JavaScript代码进行了结构化的转化,转化为一种数据结构。
CDN:Content Delivery Network,内容分发网络,是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种代码转换处理方法进行详细介绍,本公开实施例所提供的代码转换处理方法的执行主体一般为具有一定计算能力的计算机设备,在一些可能的实现方式中,该代码转换处理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为服务器为例对本公开实施例提供的代码转换处理方法加以说明。
如图1所示,为本公开实施例提供的一种代码转换处理方法的流程图,可以包括以下步骤:
S101:获取基于第一语法规范的第一代码包。
这里,第一语法规范可以为Common JS语法规范,第一代码包为基于第一语法规范书写得到的代码包,具体的,第一代码包可以为开发完成的软件包。第一代码包中可以包括多个模块对应的代码,每个模块对应的代码在正常运行情况下,可以实现一定的功能,例如,计算功能、管理功能、差错功能等,从而,第一代码包可以对应实现多种功能。
第一代码包可以转化为基于其他语法规范的代码包,转化后得到的代码包可以实现与第一代码包相同的功能。
本步骤中,当用户存在将第一代码包转换为基于第二语法规范的代码包的需求时,可以在客户端将第一代码包发送至服务端,进而,服务端可以获取到第一代码包。
其中,第二语法规范与第一语法规范之间为可以为相互转换的语法规范,具体的,第二语法规范可以为ES Module语法规范。不同的语法规范对应的代码包需要在不同的运行环境、运行条件下运行。例如,基于第一语法规范的任一代码包可以在旧版本的浏览器中运行,但无法在现有的新版本浏览器中运行,而基于第二语法规范的代码包,则可以在现有的新版本浏览器中运行。
S102:创建模拟浏览器的上下文环境,并在上下文环境中,针对第一代码包执行第一语法规范下的模块导入语法,得到第一代码包对应的模块对象。
这里,上下文环境为第一代码包可以正常运行的浏览器环境,模块导入语法为导入第一代码包中的至少部分模块对应的代码的语法。第一代码包中的不同模块对应的代码包在执行时,可以导出不同的模块对象。例如,第一代码包对应的代码如下:
Module exports={
A,
B,
C
}
其中,A、B、C分别为导出的不同的模块对象,可以实现不同的模块功能。
具体实施时,服务端在获取第一代码包之后,可以通过对第一代码包的解析,确定第一代码包对应的模块导入语法,以及第一代码包对应的语法规范,即第一语法规范,并基于第一语法规范,确定第一代码包可以正常运行的浏览器环境。其中,模块导入语法为第一代码包对应于第一语法规范的语法。
之后,可以在利用现有的转换语法对第一代码包进行转换的过程中,在Node.js中创建一个模拟浏览器的上下文环境,然后可以在上下文环境中,针对第一代码包,执行第一代码包对应的模块导入语法,引入第一代码包对应的各个模块,进而,可以在上下文环境中运行各个模块对应的代码,确定出第一代码包中的各个模块对应的模块对象。
S103:基于得到的模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。
这里,默认导出的编译过程为默认对模块对象进行编译的方法,基于该方法,可以得到模块对象对应的默认导出数据,具名导出的编译过程为根据模块对象对应的对象属性信息进行编译的方法,基于具名导出的方法,可以得到模块对象对应的具名导出数据。第二语法规范下的代码包若要在新版本的浏览器中正确运行,则需要包括以上两种数据,否则就存在运行出错的可能。
延续上例,现有的转换技术在转换时,得到的基于第二语法规范的默认转化数据可以为:
export default{
A,
B,
C
}
import{A}from(‘package’)
import{B}from(‘package’)
import{C}from(‘package’)
但上述转化得到数据中由于缺少具名导出数据export{A}、export{B和export{C},转换得到的第二代码包将在进行前置的静态变量检测阶段报错,导致第二代码包无法在新版本的浏览器中运行。
针对本步骤,具体实施时,在确定第一代码包对应的模块对象之后,在利用现有的转换语法对第一代码包进行转换的过程中,还可以同时执行对得到的各个模块对象的默认导出和具名导出的编译过程,分别得到每个模块对象对应的默认导出数据和具名导出数据。然后,可以将得到的默认导出数据和具名导出数据,以及利用现有的转换语法转换得到的数据进行合并,得到第一代码包对应的、基于第二语法规范的第二代码包。
仍延续上例,在利用本公开实施例所提供的数据转换方法进行第一代码包的转换之后,得到的第二代码包可以为:
export default{
A,
B,
C
}
export{A}
import{A}from(‘package’)
export{B}
import{B}from(‘package’)
export{C}
import{C}from(‘package’)
上述第二代码包中包括运行所需要的数据export{A}、export{B}和export{C},因而可以实现在新版本的浏览器中正常运行。
这样,基于创建模拟浏览器的上下文环境,可以为第一代码包对应的代码的正常运行提供保障条件,通过在上下文环境中针对第一代码包执行第一语法规范下的模块导入语法,可以实现对第一代码包对应的代码的导入并运行,从而可以准确地得到第一代码包对应的代码运行完成时所导出的各个模块对象;通过对模块对象执行默认导出和具名导出的两种编译过程,可以分别得到两种与第二语法规范相匹配的导出数据和导入数据,进而得到包含两种导出和导入数据的第二代码包,能够保证在新的浏览器环境中运行第二代码包时,使用第二语法规范对应的任一种模块导入或导出方法运行第二代码包,都可以存在对应的导入或导出数据,保证了第二代码包的正确运行,得到正确的模块对象,与利用现有代码转换处理技术转换得到的代码包,仍存在无法运行在现有的浏览器的问题相比,通过将第一代码包转换为包括两种类型的导入和导出数据的第二代码包的方法,可以保证第二代码包能够在新的浏览器中正确运行,提高了代码转换的准确性和合理性。
在一种实施例中,针对S102,可以按照以下步骤实施:
步骤一、对得到的模块对象进行解构,确定模块对象的对象属性信息。
这里,对象属性信息用于表征模块对象的属性,具体的,可以包括模块对象的名称属性、代码类型属性、代码数据量属性、功能属性等信息。
本步骤中,针对确定的第一代码包对应的每个模块对象,可以对其进行解构,例如,对模块对象对应的代码模块中的每行代码进行解析,得到每个模块对象分别对应的名称属性、代码类型属性、代码数据量属性、功能属性等信息,从而,可以得到每个模块对象对应的对象属性信息。
步骤二、在将第一代码包转换为第二语法规范下的第二代码包的过程中,将对象属性信息编译成具名导出数据。
这里,具名导出数据为根据模块对象对应的名称属性信息导出的数据。
具体实施时,在将第一代码包转换为第二语法规范下的第二代码包的过程中,可以在转换过程中的任一时刻,对确定的各个模块对象的对象属性信息执行具名编译的过程,将对象属性信息编译成具名导出数据。在这里,可以直接根据模块对象的对象属性信息中的名称属性进行编译,得到模块对象对应的具名导出数据。
例如,第一代码包对应的模块对象为对象A、对象B和对象C,模块对象A的名称属性为A,模块对象B的名称属性为B,模块对象C的名称属性为C,则可以生成的模块对象A的具名导出数据为export{A}、模块对象B的具名导出数据为export{B},模块对象C的具名导出数据为和export{C}。
此外,将第一代码包转换为第二语法规范下的第二代码包的过程可以基于现有的转换技术执行,在执行的过程中,加入确定模块对象以及具名导出的编译过程。
步骤三、在初始转换的第二代码包中不包括模块对象在第二语法规范下的默认导出数据的情况下,对模块对象执行默认导出的编译过程。
这里,初始转换的第二代码包为包括各个模块对象对应的具名导出数据和利用现有的转换技术对第一代码包转换后得到的转换数据的代码包。
本步骤中,在得到初始转换的第二代码包之后,可以先判断该第二代码包中是否存在模块对象在第二语法规范下的默认导出数据,如果否,则说明在利用现有技术转换的过程中,并未执行对模块对象进行默认导出的编译过程,从而,为保证转换得到的第二代码包可以在浏览器中运行,还需要生成默认导出数据。进而,可以直接将得到的各个模块对象作为默认导出的对象,分别对各个模块对象执行默认导出的编译过程,得到每个模块对象对应的默认导出数据,并将得到的默认导出数据添加至初始转换的代码包,得到包括具名导出数据和模块对象对应的默认导出数据的转换后的第二代码包。
以确定的模块对象包括模块对象L,模块对象M,模块对象N为例,则在对上述各模块对象执行默认导出的编译过程之后,得到的默认导出数据为:
export default{
L;
M;
N
}
import package from‘package’。
另外,在确定初始转换的第二代码包中包括模块对象对应的默认导出数据的情况下,可以直接将其作为最终的转换后的第二代码包。
在一种实施例中,在将对象属性信息编译成具名导出数据的过程中,可以利用AST的方式,将各个模块对象对应的对象属性信息中的名称属性编译成具名导出数据,从而得到各个模块对象对应的具名导出数据。
在一种实施例中,针对对模块对象执行默认导出的编译过程,可以直接将各个模块对象作为需要转化的第二代码包对应的各个默认对象,然后,基于第二语法规范和第一语法规范之间的转化规则,利用AST的方式,对各个默认对象执行默认导出的编译过程。
在一种实施例中,针对S101,可以按照以下步骤具体实施:
步骤P1:接收客户端发起的针对第一代码包的语法规范转化请求。
这里,语法规范转化请求为将第一代码包由第一语法规范转换为第二语法规范的转化请求,其中可以包括第一代码包对应的第一语法规范、目标转换语法规范——第二语法转换规范、待转换的第一代码包的位置信息、名称信息、语法版本信息等信息。位置信息可以是第一代码包在云端的存储位置,为第一代码包对应的代码数据的存储位置。
具体实施时,当用户存在在服务端将第一代码包转换为第二代码包的需求时,可以利用客户端向服务端发起针对第一代码包的语法规范转化请求,进而,服务端可以接收到来自客户端的语法规范转化请求。
或者,客户端也可以将第一代码包包装在语法规范转化请求中,并将语法规范转化请求发送给服务端。
步骤P2:基于语法规范转化请求,确定第一代码包的名称信息和位置信息。
本步骤中,服务器可以直接对获取的语法规范转化请求进行解析,确定语法规范转化请求对应的第一代码包的位置信息和名称信息。
步骤P3:从位置信息对应的数据位置处,获取与名称信息相匹配的第一代码包。
具体实施时,云端对应的一个数据位置可以存储至少一个代码包对应的代码数据,每个代码包的属性信息不同,例如,名称不同、数据量不同。
服务端可以先基于位置信息对应的数据位置,确定在云端与该数据位置相匹配的目标数据位置,然后,基于名称信息,从目标数据位置处存储的每个代码包中,筛选出与该名称信息相匹配的代码包,并将其作为第一代码包,从而,服务端可以获取到第一代码包。
另外,在语法规范转化请求中包括第一代码包的情况下,可以直接基于对语法规范转化请求的解析,获取第一代码包,这样,不需要在云端获取第一代码包,提高了服务端进行代码转换的效率。
在一种实施例中,在得到第二代码包之后,还可以采用预设的包管理工具,对第二代码包进行封装后发布。
这里,针对任一代码包,需要经过封装后才可以进行发布。因此,在得到第二代码包之后,可以利用预设的包管理工具NPM,将第二代码包封装成对应的NPM包,将封装得到的NPM包进行发布,从而,实现对第二代码包的封装发布。
在一种实施例中,针对封装后的第二代码包,可以利用内容分发网络CDN对其进行发布。
具体实施时,将可以将封装后的第二代码包上传至各个CDN,之后,各个需要获取第二代码包的客户端可以在其对应的CDN中,下载封装后的第二代码包,并在下载完成后,运行封装后的第二代码包,从而,实现其对应的功能。
如图2所示,为本公开实施例所提供的一种代码转换处理的具体实施流程图,可以包括以下步骤:
S201:接收客户端发起的语法规范转化请求。
S202:基于语法规范转化请求,获取第一代码包。
S203:在将第一代码包转换为第二语法规范下的第二代码包的过程中,创建模拟浏览器的上下文环境,并在上下文环境中,针对第一代码包执行第一语法规范下的模块导入语法,得到第一代码包对应的模块对象。
S204:确定模块对象的对象属性信息,并利用抽象语法树的方式,将对象属性信息编译成具名导出数据。
S205:在初始转换的第二代码包中不包括模块对象在第二语法规范下的默认导出数据的情况下,利用抽象语法树的方式,对模块对象执行默认导出的编译过程,得到模块对象对应的默认导出数据。
这里,初始转换得到的第二代码包中包括利用现有的转化技术转换得到的数据和具名导出数据。
S206:基于初始转换的第二代码包和默认导出数据,生成第二语法规范下的第二代码包。
这里,可以将初始转换的第二代码包和默认导出数据进行合并,得到第二语法规范下的第二代码包。
S207:采用预设的包管理工具,对第二代码包进行封装。
S208:将封装后的第二代码包上传至各个内容分发网络CDN,以便客户端在对应的CDN下载并运行第二代码包。
关于步骤S201~S208的具体实施步骤,可以参照上述各实施例,此处不再赘述。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与代码转换处理方法对应的代码转换处理装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述代码转换处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
如图3所示,为本公开实施例提供的一种代码转换处理装置的示意图,包括:
获取模块301,用于获取基于第一语法规范的第一代码包;
执行模块302,用于创建模拟浏览器的上下文环境,并在所述上下文环境中,针对所述第一代码包执行所述第一语法规范下的模块导入语法,得到所述第一代码包对应的模块对象;
编译模块303,用于基于得到的所述模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。
在一种可能的实施方式中,所述编译模块303,用于对得到的所述模块对象进行解构,确定所述模块对象的对象属性信息;
在将所述第一代码包转换为第二语法规范下的第二代码包的过程中,将所述对象属性信息编译成具名导出数据;
在初始转换的第二代码包中不包括所述模块对象在所述第二语法规范下的默认导出数据的情况下,对所述模块对象执行默认导出的编译过程;
其中,转换后的第二代码包中包括所述具名导出数据和所述模块对象对应的默认导出数据。
在一种可能的实施方式中,所述编译模块303,用于利用抽象语法树的方式,将所述对象属性信息编译成具名导出数据。
在一种可能的实施方式中,所述编译模块303,用于将所述模块对象作为所述第二代码包对应的默认对象;
基于所述第二语法规范,利用抽象语法树的方式,对所述默认对象执行默认导出的编译过程。
在一种可能的实施方式中,所述获取模块301,用于接收客户端发起的针对所述第一代码包的语法规范转化请求;
基于所述语法规范转化请求,确定所述第一代码包的名称信息和位置信息;
从所述位置信息对应的数据位置处,获取与所述名称信息相匹配的所述第一代码包。
在一种可能的实施方式中,所述装置还包括:
发布模块304,用于采用预设的包管理工具,对所述第二代码包进行封装后发布。
在一种可能的实施方式中,所述发布模块304,用于将封装后的所述第二代码包上传至各个内容分发网络CDN,以便客户端在对应的CDN下载并运行所述第二代码包。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例还提供了一种计算机设备,如图4所示,为本公开实施例提供的一种计算机设备结构示意图,包括:
处理器41和存储器42;所述存储器42存储有处理器41可执行的机器可读指令,处理器41用于执行存储器42中存储的机器可读指令,所述机器可读指令被处理器41执行时,处理器41执行下述步骤:S101:获取基于第一语法规范的第一代码包;S102:创建模拟浏览器的上下文环境,并在上下文环境中,针对第一代码包执行第一语法规范下的模块导入语法,得到第一代码包对应的模块对象以及S103:基于得到的模块对象执行默认导出和具名导出的编译过程,得到基于第二语法规范的第二代码包。
上述存储器42包括内存421和外部存储器422;这里的内存421也称内存储器,用于暂时存放处理器41中的运算数据,以及与硬盘等外部存储器422交换的数据,处理器41通过内存421与外部存储器422进行数据交换。
上述指令的具体执行过程可以参考本公开实施例中所述的代码转换处理方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的代码转换处理方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的代码转换处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的代码转换处理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

Claims (9)

1.一种代码转换处理方法,其特征在于,包括:
获取基于第一语法规范的第一代码包;
创建模拟浏览器的上下文环境,并在所述上下文环境中,针对所述第一代码包执行所述第一语法规范下的模块导入语法,得到所述第一代码包对应的模块对象;
对得到的所述模块对象进行解构,确定所述模块对象的对象属性信息;
在将所述第一代码包转换为第二语法规范下的第二代码包的过程中,将所述对象属性信息编译成具名导出数据;
在初始转换的第二代码包中不包括所述模块对象在所述第二语法规范下的默认导出数据的情况下,对所述模块对象执行默认导出的编译过程;
其中,转换后的第二代码包中包括所述具名导出数据和所述模块对象对应的默认导出数据。
2.根据权利要求1所述的方法,其特征在于,所述将所述对象属性信息编译成具名导出数据,包括:
利用抽象语法树的方式,将所述对象属性信息编译成具名导出数据。
3.根据权利要求1所述的方法,其特征在于,对所述模块对象执行默认导出的编译过程,包括:
将所述模块对象作为所述第二代码包对应的默认对象;
基于所述第二语法规范,利用抽象语法树的方式,对所述默认对象执行默认导出的编译过程。
4.根据权利要求1所述的方法,其特征在于,所述获取基于第一语法规范的第一代码包,包括:
接收客户端发起的针对所述第一代码包的语法规范转化请求;
基于所述语法规范转化请求,确定所述第一代码包的名称信息和位置信息;
从所述位置信息对应的数据位置处,获取与所述名称信息相匹配的所述第一代码包。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
采用预设的包管理工具,对所述第二代码包进行封装后发布。
6.根据权利要求5所述的方法,其特征在于,对所述第二代码包进行封装后发布,包括:
将封装后的所述第二代码包上传至各个内容分发网络CDN,以便客户端在对应的CDN下载并运行所述第二代码包。
7.一种代码转换处理装置,其特征在于,包括:
获取模块,用于获取基于第一语法规范的第一代码包;
执行模块,用于创建模拟浏览器的上下文环境,并在所述上下文环境中,针对所述第一代码包执行所述第一语法规范下的模块导入语法,得到所述第一代码包对应的模块对象;
编译模块,用于对得到的所述模块对象进行解构,确定所述模块对象的对象属性信息;
在将所述第一代码包转换为第二语法规范下的第二代码包的过程中,将所述对象属性信息编译成具名导出数据;
在初始转换的第二代码包中不包括所述模块对象在所述第二语法规范下的默认导出数据的情况下,对所述模块对象执行默认导出的编译过程;
其中,转换后的第二代码包中包括所述具名导出数据和所述模块对象对应的默认导出数据。
8.一种计算机设备,其特征在于,包括:处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述处理器执行如权利要求1至6任意一项所述的代码转换方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被计算机设备运行时,所述计算机设备执行如权利要求1至6任意一项所述的代码转换方法的步骤。
CN202110938396.4A 2021-08-16 2021-08-16 一种代码转换处理方法、装置、计算机设备和存储介质 Active CN113608746B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110938396.4A CN113608746B (zh) 2021-08-16 2021-08-16 一种代码转换处理方法、装置、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110938396.4A CN113608746B (zh) 2021-08-16 2021-08-16 一种代码转换处理方法、装置、计算机设备和存储介质

Publications (2)

Publication Number Publication Date
CN113608746A CN113608746A (zh) 2021-11-05
CN113608746B true CN113608746B (zh) 2023-10-27

Family

ID=78308688

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110938396.4A Active CN113608746B (zh) 2021-08-16 2021-08-16 一种代码转换处理方法、装置、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN113608746B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114675831B (zh) * 2022-03-09 2023-10-31 韩济澎 一种编程语言的编译系统及方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109739478A (zh) * 2018-12-24 2019-05-10 网易(杭州)网络有限公司 前端项目自动化构建方法、装置、存储介质及电子设备
CN110362317A (zh) * 2018-04-09 2019-10-22 腾讯科技(深圳)有限公司 一种代码转换方法、装置和存储介质
CN112015430A (zh) * 2020-09-07 2020-12-01 平安国际智慧城市科技股份有限公司 JavaScript代码翻译方法、装置、计算机设备及存储介质
CN112214736A (zh) * 2020-11-02 2021-01-12 杭州安恒信息技术股份有限公司 一种代码加密方法及相关组件
CN112486490A (zh) * 2020-12-15 2021-03-12 平安银行股份有限公司 前端代码打包方法、装置、电子设备及存储介质
CN113031967A (zh) * 2021-04-19 2021-06-25 北京字节跳动网络技术有限公司 一种代码转换方法及装置
CN113138767A (zh) * 2021-04-25 2021-07-20 中国工商银行股份有限公司 代码语言转换方法、装置、电子设备及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110362317A (zh) * 2018-04-09 2019-10-22 腾讯科技(深圳)有限公司 一种代码转换方法、装置和存储介质
CN109739478A (zh) * 2018-12-24 2019-05-10 网易(杭州)网络有限公司 前端项目自动化构建方法、装置、存储介质及电子设备
CN112015430A (zh) * 2020-09-07 2020-12-01 平安国际智慧城市科技股份有限公司 JavaScript代码翻译方法、装置、计算机设备及存储介质
CN112214736A (zh) * 2020-11-02 2021-01-12 杭州安恒信息技术股份有限公司 一种代码加密方法及相关组件
CN112486490A (zh) * 2020-12-15 2021-03-12 平安银行股份有限公司 前端代码打包方法、装置、电子设备及存储介质
CN113031967A (zh) * 2021-04-19 2021-06-25 北京字节跳动网络技术有限公司 一种代码转换方法及装置
CN113138767A (zh) * 2021-04-25 2021-07-20 中国工商银行股份有限公司 代码语言转换方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN113608746A (zh) 2021-11-05

Similar Documents

Publication Publication Date Title
JP6856749B2 (ja) ブロックチェーン上のネイティブ契約を実施するためのシステムおよび方法
Hirai Defining the ethereum virtual machine for interactive theorem provers
Zheng et al. Ethereum smart contract development in solidity
CN109885311B (zh) 一种应用程序的生成方法及设备
US10489129B2 (en) Layered vector architecture compatibility for cross-system portability
CN105100127B (zh) 用于验证在云计算环境中的应用部署拓扑的设备和方法
CN113065656A (zh) 一种规则引擎配置方法、装置、服务器及可读存储介质
CN110069259B (zh) 基于idl文件的解析方法、装置、电子设备和存储介质
CN108696381A (zh) 一种协议配置方法及装置
US20210365253A1 (en) Heterogeneity-agnostic and topology-agnostic data plane programming
CN110275831A (zh) 协议接口的mock数据校验方法和装置
CN111399840B (zh) 一种模块开发方法及装置
CN111506366B (zh) 插件调用方法、装置、电子设备与存储介质
CN111290778A (zh) Ai模型的包装方法、平台及电子设备
US10057331B2 (en) Automatic abstraction of flow of control in a distributed virtualization platform
CN112306864A (zh) 基于微服务的Mock测试方法和系统、存储介质、计算设备
CN113608746B (zh) 一种代码转换处理方法、装置、计算机设备和存储介质
CN111694613A (zh) 应用程序模块间的解耦方法、电子装置及存储介质
CN105068851A (zh) 一种移动终端rom包的安全打包方法、系统及移动终端
CN104010045B (zh) 基于云平台的移动节点执行任务的方法
CN112052011A (zh) 小程序的合包方法、装置、电子设备及介质
CN110659022B (zh) 一种基于Java自动调用Python脚本的方法
CN111736844A (zh) 一种数据库云服务标准接口及实现方法
CN110826074A (zh) 一种应用漏洞检测方法、装置和计算机可读存储介质
CN116089004A (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
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Patentee after: Douyin Vision Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Patentee before: Tiktok vision (Beijing) Co.,Ltd.

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Patentee after: Tiktok vision (Beijing) Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Patentee before: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd.