CN117215560A - 一种样板代码导入方法、装置、设备及存储介质 - Google Patents
一种样板代码导入方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117215560A CN117215560A CN202311171429.2A CN202311171429A CN117215560A CN 117215560 A CN117215560 A CN 117215560A CN 202311171429 A CN202311171429 A CN 202311171429A CN 117215560 A CN117215560 A CN 117215560A
- Authority
- CN
- China
- Prior art keywords
- current
- attribute
- file
- code
- function library
- 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
- 238000000034 method Methods 0.000 title claims abstract description 51
- 238000012545 processing Methods 0.000 claims abstract description 76
- 230000006870 function Effects 0.000 claims description 128
- 238000004590 computer program Methods 0.000 claims description 16
- 238000004806 packaging method and process Methods 0.000 claims description 12
- 238000012856 packing Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 8
- 238000011161 development Methods 0.000 abstract description 12
- 230000008676 import Effects 0.000 description 17
- 238000004891 communication Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 230000007704 transition Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000009795 derivation Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000000605 extraction Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- ODKSFYDXXFIFQN-UHFFFAOYSA-M argininate Chemical compound [O-]C(=O)C(N)CCCNC(N)=N ODKSFYDXXFIFQN-UHFFFAOYSA-M 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种样板代码导入方法、装置、设备及存储介质。该方法包括获取配置数组;配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,第一属性用于匹配项目子文件,第二属性用于指示第三方工具函数库;确定配置数组中的当前处理数组元素,并根据当前处理数组元素的第二属性确定当前第三方工具函数库;对当前第三方工具函数库进行处理以生成与当前第三方工具函数库匹配的样板代码;根据当前处理数组元素的第一属性确定目标项目子文件,并将样板代码导入目标项目子文件的目标位置。本发明的技术方案消除繁琐的样板代码编写,显著提升前端项目的开发效率和可维护性。
Description
技术领域
本发明涉及前端项目技术领域,尤其涉及一种样板代码导入方法、装置、设备及存储介质。
背景技术
在前端项目的代码模块组织中,ES模块相较于传统的AMD(Asynchronous ModuleDefinition,异步模块定义)、CommonJS、UMD(Universal Module Definition,通用模块化定义)等方式表现出了极佳的静态分析特性。Vite作为下一代前端开发与构建工具,得益于这一特性,可以优化项目的无效代码,从而减少了最终代码包的大小,提升项目的运行性能。
不过,为了提高开发效率,通常会从第三方工具库向项目模块文件导入工具函数。然而,在Vite项目中,ES模块的方式需要在每个使用到第三方工具库的项目模块文件中重复导入代码,这造成了大量样板代码的出现,对开发效率和可维护性都产生了负面影响。
发明内容
本发明提供了一种样板代码导入方法、装置、设备及存储介质,以消除繁琐的样板代码编写,显著提升项目的开发效率和可维护性。
根据本发明的一方面,提供了一种样板代码导入方法,该方法包括:
获取配置数组;所述配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,所述第一属性用于匹配项目子文件,所述第二属性用于指示第三方工具函数库;
确定所述配置数组中的当前处理数组元素,并根据所述当前处理数组元素的所述第二属性确定当前第三方工具函数库;
对所述当前第三方工具函数库进行处理以生成与所述当前第三方工具函数库匹配的样板代码;
根据所述当前处理数组元素的所述第一属性确定目标项目子文件,并将所述样板代码导入所述目标项目子文件的目标位置。
根据本发明的另一方面,提供了一种样板代码导入装置,该装置包括:
配置数组获取模块,用于获取配置数组;所述配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,所述第一属性用于匹配项目子文件,所述第二属性用于指示第三方工具函数库;
当前处理对象确定模块,用于确定所述配置数组中的当前处理数组元素,并根据所述当前处理数组元素的所述第二属性确定当前第三方工具函数库;
样板代码生成模块,用于对所述当前第三方工具函数库进行处理以生成与所述当前第三方工具函数库匹配的样板代码;
样板代码导入模块,用于根据所述当前处理数组元素的所述第一属性确定目标项目子文件,并将所述样板代码导入所述目标项目子文件的目标位置。
根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的样板代码导入方法。
根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的样板代码导入方法。
本发明实施例的技术方案,通过获取配置数组;配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,第一属性用于匹配项目子文件,第二属性用于指示第三方工具函数库;确定配置数组中的当前处理数组元素,并根据当前处理数组元素的第二属性确定当前第三方工具函数库;对当前第三方工具函数库进行处理以生成与当前第三方工具函数库匹配的样板代码;根据当前处理数组元素的第一属性确定目标项目子文件,并将样板代码导入目标项目子文件的目标位置,解决了现有Vite项目中ES模块方式需要在每个使用到第三方工具函数库的项目模块文件中重复导入代码造成大量样板代码出现,从而导致前端项目的开发效率和可维护性都产生了负面影响的问题,消除了繁琐的样板代码编写,显著提升了项目的开发效率和可维护性。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种样板代码导入方法的流程图;
图2为本发明实施例三提供的一种样板代码导入装置的结构示意图;
图3是实现本发明实施例的样板代码导入方法的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例一
图1为本发明实施例一提供的一种样板代码导入方法的流程图,本实施例可适用于对项目文件进行样板代码导入的情况,该方法可以由样板代码导入装置来执行,该样板代码导入装置可以采用硬件和/或软件的形式实现,该样板代码导入装置可配置于计算机中。如图1所示,该方法包括:
S110、获取配置数组。
配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,第一属性用于匹配项目子文件,第二属性用于指示第三方工具函数库。
其中,项目文件可以指前端开发项目的代码文件。项目文件中的各模块代码可以称为项目子文件,项目子文件例如可以是js、ts、jsx、tsx、vue等文件。
本实施例中,配置数组可以由用户通过vite插件函数的参数可选配置,示例性的,可选配置是数组类型的utils,相当于配置数组,数组的每项数组元素是一个对象,每项数组元素具有属性:Pattern(相当于第一属性)和Module(相当于第二属性),其中:
Pattern:必填,js正则对象,用于匹配项目子文件,例如:/(\.[jt]sx?$)|(\.vue\?vue&type=script&lang\.[jt]sx$)/,一个可以匹配js、ts、jsx、tsx、vue文件的js正则。
Module:必填,字符串,将要导入的第三方工具函数库名称,例如:lodash-es,一个常用函数库。
本实施例中,为了从第三方工具函数库中将样板代码导入项目文件,用户可以先通过vite插件完成与项目文件对应的配置数组,在每项配置数组元素中配置对项目子文件进行样板代码导入的规则。
S120、确定配置数组中的当前处理数组元素,并根据当前处理数组元素的第二属性确定当前第三方工具函数库。
本实施例中,需要将配置数组中各数组元素依次进行处理,因此,将各数组元素依次作为当前处理数组元素,并根据当前处理数组元素的第二属性的属性值确定当前需要处理的第三方工具函数库。
S130、对当前第三方工具函数库进行处理以生成与当前第三方工具函数库匹配的样板代码。
具体的,可以通过以下步骤生成与当前第三方工具函数库匹配的样板代码:
步骤1、对当前第三方工具函数库进行打包处理得到单文件ES模块代码。
一个可选实施方式中,对当前第三方工具函数库进行打包处理得到单文件ES模块代码,可以包括:创建与当前第三方工具函数库匹配的导出声明代码文件;根据导出声明代码文件的路径创建对当前第三方工具函数库的打包配置项;根据打包配置项和预先指定的打包代码配置选项,生成打包结果对象;将打包结果对象中输出属性的目标元素的代码属性确定为单文件ES模块代码。
其中,导出声明代码文件可以表示需要对哪个第三方工具函数库进行工具函数导出。打包配置项可以指对当前第三方工具函数库的打包配置规则。预先指定的打包代码配置选项可以指将当前第三方工具函数库打包成ES模块代码。打包结果对象可以指res对象。输出属性可以指output属性。代码属性可以指code属性。
示例性的,可以创建rollup打包配置项,它是一个对象,其格式如下:
{
input:filePath,
plugins:[resolve()]
}
其中:input对应的filePath即为当前第三方工具函数库的导出声明代码文件路径;plugins数组中reslove()函数由@rollup/plugin-node-resolve插件提供;
进一步可以使用rollup模块中rollup(option:any):any函数基于rollup打包配置项生成资源对象;
进一步可以创建rollup生成打包代码的配置选项,其格式如下:
{
format:'es',
}
其中,format:'es'表示资源对象最终生成ES模块的代码;
使用资源对象的generate(option:any)函数以打包代码的配置选项为参数,生成最终打包结果res对象,其中res对象的output属性的第一个元素(即目标元素)的code属性就是当前第三方工具函数库的单文件ES模块代码。
可选的,基于上述可选实施方式,创建与当前第三方工具函数库匹配的导出声明代码文件,可以包括:生成缓存目录路径,并在缓存目标路径下生成以当前第三方工具函数库名称为名的js文件路径;根据当前第三方工具函数库名称生成与当前第三方工具函数库匹配的导出声明代码文件内容;将导出声明代码文件内容放入js文件路径,创建与当前第三方工具函数库匹配的导出声明代码文件。
示例性的,本实施例可以使用node fs模块来创建并且缓存当前第三方工具函数库导出全部声明代码文件,具体步骤可以如下:
使用node path模块的resolve(...arg[]:string[]):string函数生成一个在vite插件文件目录下的cache目录路径;
使用node path模块的resolve(...arg[]:string[]):string函数,在上一步的cache目录路径下,生成一个utils中当前数组元素的module属性的值(相当于当前第三方工具函数库)为名字的js文件路径;
使用node fs模块existsSync(filePath:string):boolean函数判断cache目录是否存在,如果不存在,则使用node fs模块mkdirSync(filePath:string)函数创建cache目录;
使用node fs模块existsSync(filePath:string):boolean函数判断js文件路径是否存在,如果不存在,则使用node fs模块writeFileSync(filePath:string,text:string)函数创建,具体步骤可以如下:
ⅰ、基于utils选项中的当前处理数组元素的module属性生成如下导出全部声明代码文件内容:export*from"${module}";
ⅱ、使用node fs模块writeFileSync(filePath:string,text:string)函数将i步骤的export*from"${module}"输入到js文件路径代表的文件中,即得到当前第三方工具函数库导出声明代码文件。
需要说明,生成js文件路径代表着当前第三方工具函数库导出全部声明代码的文件。
步骤2、解析单文件ES模块代码得到抽象语法树AST,对AST进行遍历以提取单文件ES模块代码中具名导出的标识符数组。
本实施例中,例如可以使用@babel/parser和@babel/traverse模块提取单文件ES模块具名导出的标识符。其中,@babel/parser是一个由Babel提供的JavaScript解析库,其作用是将源代码解析成一个AST,进而实现对代码的各种操作,如转换、分析、优化等。@babel/traverse是一个由Babel提供的JavaScript AST遍历库,用于遍历和修改AST。@babel/traverse可以让我们对AST进行不同粒度的遍历和操作,比如删除、替换、插入节点等。
一个可选实施方式中,对AST进行遍历以提取单文件ES模块代码中具名导出的标识符数组,可以包括:在遍历AST过程中,确定当前节点;遍历当前节点的节点属性下的说明属性,并将说明属性每一项导出属性下的名称属性存储在预建立的空数组中;返回执行确定当前节点的操作,直至对ST的全部节点遍历完毕,获取标识符数组。
其中,节点属性可以指node属性。说明属性可以指specifiers属性。导出属性可以指exported属性。名称属性可以指name属性。预建立的空数组可以是exportArr,空数组可以用于收集单文件ES模块具名导出的标识符。
示例性的,提取标识符数组的具体步骤可以如下:
创建一个空数组exportArr;
创建解析对象,其格式如:{sourceType:'module'},其中:sourceType:'module'代表着将要解析的代码是一个ES模块;
使用@babel/parser模块中的parse(code:string,option:any)函数,以上一步的解析对象为选项,将当前第三方工具函数库的单文件ES模块代码解析成AST;
使用@babel/traverse模块中的traverse(ast:any,option:any)对AST进行遍历,其中,option参数是一个对象,它代表着当遍历到某些AST节点时所要进行的操作,其格式如下:
其中:ExportNamedDeclaration属性是一个函数,它代表着当遍历到具名导出语句时的操作;path参数代表着具名导出语句节点在Ast上路径对象,它的node属性下的specifiers属性代表着ES模块具名导出的标识符的节点数组,使用数组的forEach(fn:any)函数遍历specifiers属性;将它的每一项的exported属性的name属性存储在exportArr数组中。
步骤3、根据标识符数组生成与当前第三方工具函数库匹配的样板代码。
可选的,每项数组元素还具有第三属性,第三属性用于为标识符设置重命名前缀。
其中,第三属性可以指S110中utils数组的另一个属性。例如,prefix:可选的,字符串,导入样板代码中的重命名前缀,例如:假设第三方库是lodash-es,如果prefix没有设置,那么生成导入样板代码可以如:import{add,max}from'lodash-es';如果设置prefix为‘_’,那么最终生成的导入样板代码可以如:import{add as_add,max as_max}from'lodash-es'。
相应的,根据标识符数组生成与当前第三方工具函数库匹配的样板代码,可以包括:根据当前处理数组元素的第三属性,为标识符数组中各标识符设置重命名前缀,生成各新标识符;利用预设符号将各新标识符拼接成字符串;将字符串和当前第三方工具函数库名称进行拼接,生成样板代码。
本实施例中,在提取具名导出的标识符数组后,可以判断当前处理数组元素的第三属性是否设置重命名前缀,若有,可以为标识符数组中各标识符设置重命名前缀生成对应的新标识符,进而利用预设符号(例如“,”)将各新标识符拼接成字符串,并将字符串与第三方工具函数库名称再拼接生成样板代码。需要说明,若第三属性没有设置重命名前缀则保持原标识符不变。设置重命名前缀的好处在于可以避免标识符与项目子文件内的函数发生重复。
示例性的,可以判断utils数组中当前处理数组元素是否配置重命名前缀prefix,如果有,则使用数组的map(fn:any)函数遍历具名导出的标识符数组exportArr,给每一项标识符添加用户配置中prefix属性代表的导入样板代码中的重命名前缀,如果没有,保持不变;进一步使用数组join(str:string)函数将标识符数组exportArr以‘,’拼接成一个字符串;进一步基于该字符串和utils数组中当前处理数组元素的module属性拼接成ES模块导入语句,其格式如:import{${exportStr}}from"${module}"。
S140、根据当前处理数组元素的第一属性确定目标项目子文件,并将样板代码导入目标项目子文件的目标位置。
可选的,在对当前第三方工具函数库进行处理以生成与当前第三方工具函数库匹配的样板代码之后,还可以:将样板代码赋值给对应数组元素的第四属性;
其中,第四属性可以指importCode属性,第四属性用于指示样板代码。可选的,可以在当前第三方工具函数库的样板代码生成后就赋值给对应当前处理数组元素的第四属性,也可以在配置数组的全部数组元素处理完成后得到全部需要的样板代码后再赋值。
例如,判断用户是否配置了utils选项,如果没有,退出执行,否则,使用数组的map(fn:any)函数遍历用户配置的utils选项,重复执行第2至第5大步骤,获得所有第三方模块的导入样板代码,并且将每一个模块的导入样本代码复制给utils每一个对应选项的importCode属性;
需要注意的是,当前操作需要在vite插件的buildStart()钩子函数中执行,以便提前获得所有第三方工具函数库的导入样板代码。
相应的,根据当前处理数组元素的第一属性确定目标项目子文件,并将样板代码导入目标项目子文件的目标位置,可以包括:根据当前处理数组元素的第一属性和项目子文件的身份标识,将当前处理数组元素与项目子文件进行匹配;将与当前处理数组元素匹配成功的项目子文件确定为目标项目子文件;将当前处理数组元素的第四属性的属性值导入目标项目子文件内容之前。
可选的,可以在当前第三方工具函数库的样板代码赋值给对应当前处理数组元素的第四属性后将其导入对应的项目子文件内容之前,也可以在全部需要的样板代码均赋值后再导入。
导入操作可以在vite插件的transform(code:string,id:string)钩子函数中执行,transform()函数将会对每一个项目子文件进行转换,transform()函数第一个参数代表着项目子文件内容,用code变量表示项目子文件内容;第二个参数代表项目子文件地址,用id变量表示项目子文件地址。
可以在此vite插件钩子函数判断每一个项目子文件是否能否命中用户配置的utils数组,具体步骤如下:
使用数组的find(fn:any)函数查找用户配置utils数组中是否有命中项目文件地址Id的项,例如:使用正则test(str:string)函数判断每一项数组元素的pattern是否匹配项目文件地址id;
如果查找出命中项目子文件地址id的数组元素,则将当前处理数组元素的importCode属性对应的字符串(即样板代码)导入到当前项目子文件内容的最前面。
本发明实施例的技术方案,通过获取配置数组;配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,第一属性用于匹配项目子文件,第二属性用于指示第三方工具函数库;确定配置数组中的当前处理数组元素,并根据当前处理数组元素的第二属性确定当前第三方工具函数库;对当前第三方工具函数库进行处理以生成与当前第三方工具函数库匹配的样板代码;根据当前处理数组元素的第一属性确定目标项目子文件,并将样板代码导入目标项目子文件的目标位置,解决了现有Vite项目中ES模块方式需要在每个使用到第三方工具函数库的项目模块文件中重复导入代码造成大量样板代码出现,从而导致前端项目的开发效率和可维护性都产生了负面影响的问题,消除了繁琐的样板代码编写,显著提升了项目的开发效率和可维护性。
实施例二
图2为本发明实施例三提供的一种样板代码导入装置的结构示意图。如图2所示,该装置包括:配置数组获取模块210、当前处理对象确定模块220、样板代码生成模块230和样板代码导入模块240。其中:
配置数组获取模块210,用于获取配置数组;所述配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,所述第一属性用于匹配项目子文件,所述第二属性用于指示第三方工具函数库;
当前处理对象确定模块220,用于确定所述配置数组中的当前处理数组元素,并根据所述当前处理数组元素的所述第二属性确定当前第三方工具函数库;
样板代码生成模块230,用于对所述当前第三方工具函数库进行处理以生成与所述当前第三方工具函数库匹配的样板代码;
样板代码导入模块240,用于根据所述当前处理数组元素的所述第一属性确定目标项目子文件,并将所述样板代码导入所述目标项目子文件的目标位置。
本发明实施例的技术方案,通过获取配置数组;配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,第一属性用于匹配项目子文件,第二属性用于指示第三方工具函数库;确定配置数组中的当前处理数组元素,并根据当前处理数组元素的第二属性确定当前第三方工具函数库;对当前第三方工具函数库进行处理以生成与当前第三方工具函数库匹配的样板代码;根据当前处理数组元素的第一属性确定目标项目子文件,并将样板代码导入目标项目子文件的目标位置,解决了现有Vite项目中ES模块方式需要在每个使用到第三方工具函数库的项目模块文件中重复导入代码造成大量样板代码出现,从而导致前端项目的开发效率和可维护性都产生了负面影响的问题,消除了繁琐的样板代码编写,显著提升了项目的开发效率和可维护性。
可选的,样板代码生成模块230,可以包括:
ES模块代码获取子模块,用于对所述当前第三方工具函数库进行打包处理得到单文件ES模块代码;
标识符数组提取子模块,用于解析所述单文件ES模块代码得到抽象语法树AST,对所述AST进行遍历以提取所述单文件ES模块代码中具名导出的标识符数组;
样板代码生成子模块,用于根据所述标识符数组生成与所述当前第三方工具函数库匹配的样板代码。
可选的,ES模块代码获取子模块,可以包括:
导出声明代码文件创建单元,用于创建与所述当前第三方工具函数库匹配的导出声明代码文件;
打包配置项创建单元,用于根据所述导出声明代码文件的路径创建对所述当前第三方工具函数库的打包配置项;
打包结果对象生成单元,用于根据所述打包配置项和预先指定的打包代码配置选项,生成打包结果对象;
单文件ES模块代码确定单元,用于将所述打包结果对象中输出属性的目标元素的代码属性确定为所述单文件ES模块代码。
可选的,导出声明代码文件创建单元,具体可以用于:
生成缓存目录路径,并在所述缓存目标路径下生成以当前第三方工具函数库名称为名的js文件路径;
根据当前第三方工具函数库名称生成与所述当前第三方工具函数库匹配的导出声明代码文件内容;
将所述导出声明代码文件内容放入所述js文件路径,创建与所述当前第三方工具函数库匹配的导出声明代码文件。
可选的,标识符数组提取子模块,具体可以用于:
在遍历所述AST过程中,确定当前节点;
遍历所述当前节点的节点属性下的说明属性,并将所述说明属性每一项导出属性下的名称属性存储在预建立的空数组中;
返回执行确定当前节点的操作,直至对所述AST的全部节点遍历完毕,获取所述标识符数组。
可选的,每项数组元素还具有第三属性,所述第三属性用于为标识符设置重命名前缀;
相应的,样板代码生成子模块,具体可以用于:
根据所述当前处理数组元素的所述第三属性,为所述标识符数组中各标识符设置重命名前缀,生成各新标识符;
利用预设符号将所述各新标识符拼接成字符串;
将所述字符串和当前第三方工具函数库名称进行拼接,生成所述样板代码。
可选的,样板代码导入装置,还包括,第四属性赋值模块,用于在对所述当前第三方工具函数库进行处理以生成与所述当前第三方工具函数库匹配的样板代码之后:
将所述样板代码赋值给对应数组元素的第四属性;
相应的,样板代码导入模块240,具体可以用于:
根据所述当前处理数组元素的所述第一属性和项目子文件的身份标识,将所述当前处理数组元素与项目子文件进行匹配;
将与所述当前处理数组元素匹配成功的项目子文件确定为所述目标项目子文件;
将所述当前处理数组元素的第四属性的属性值导入所述目标项目子文件内容之前。
本发明实施例所提供的样板代码导入装置可执行本发明任意实施例所提供的样板代码导入方法,具备执行方法相应的功能模块和有益效果。
实施例三
图3示出了可以用来实施本发明的实施例的电子设备300的结构示意图。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图3所示,电子设备300包括至少一个处理器301,以及与至少一个处理器301通信连接的存储器,如只读存储器(ROM)302、随机访问存储器(RAM)303等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器301可以根据存储在只读存储器(ROM)302中的计算机程序或者从存储单元308加载到随机访问存储器(RAM)303中的计算机程序,来执行各种适当的动作和处理。在RAM 303中,还可存储电子设备300操作所需的各种程序和数据。处理器301、ROM 302以及RAM 303通过总线304彼此相连。输入/输出(I/O)接口305也连接至总线304。
电子设备300中的多个部件连接至I/O接口305,包括:输入单元306,例如键盘、鼠标等;输出单元307,例如各种类型的显示器、扬声器等;存储单元308,例如磁盘、光盘等;以及通信单元309,例如网卡、调制解调器、无线通信收发机等。通信单元309允许电子设备300通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器301可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器301的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器301执行上文所描述的各个方法和处理,例如样板代码导入方法。
在一些实施例中,样板代码导入方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元308。在一些实施例中,计算机程序的部分或者全部可以经由ROM 302和/或通信单元309而被载入和/或安装到电子设备300上。当计算机程序加载到RAM 303并由处理器301执行时,可以执行上文描述的样板代码导入方法的一个或多个步骤。备选地,在其他实施例中,处理器301可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行样板代码导入方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (10)
1.一种样板代码导入方法,其特征在于,包括:
获取配置数组;所述配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,所述第一属性用于匹配项目子文件,所述第二属性用于指示第三方工具函数库;
确定所述配置数组中的当前处理数组元素,并根据所述当前处理数组元素的所述第二属性确定当前第三方工具函数库;
对所述当前第三方工具函数库进行处理以生成与所述当前第三方工具函数库匹配的样板代码;
根据所述当前处理数组元素的所述第一属性确定目标项目子文件,并将所述样板代码导入所述目标项目子文件的目标位置。
2.根据权利要求1所述的方法,其特征在于,对所述当前第三方工具函数库进行处理以生成与所述当前第三方工具函数库匹配的样板代码,包括:
对所述当前第三方工具函数库进行打包处理得到单文件ES模块代码;
解析所述单文件ES模块代码得到抽象语法树AST,对所述AST进行遍历以提取所述单文件ES模块代码中具名导出的标识符数组;
根据所述标识符数组生成与所述当前第三方工具函数库匹配的样板代码。
3.根据权利要求2所述的方法,其特征在于,对所述当前第三方工具函数库进行打包处理得到单文件ES模块代码,包括:
创建与所述当前第三方工具函数库匹配的导出声明代码文件;
根据所述导出声明代码文件的路径创建对所述当前第三方工具函数库的打包配置项;
根据所述打包配置项和预先指定的打包代码配置选项,生成打包结果对象;
将所述打包结果对象中输出属性的目标元素的代码属性确定为所述单文件ES模块代码。
4.根据权利要求3所述的方法,其特征在于,创建与所述当前第三方工具函数库匹配的导出声明代码文件,包括:
生成缓存目录路径,并在所述缓存目标路径下生成以当前第三方工具函数库名称为名的js文件路径;
根据当前第三方工具函数库名称生成与所述当前第三方工具函数库匹配的导出声明代码文件内容;
将所述导出声明代码文件内容放入所述js文件路径,创建与所述当前第三方工具函数库匹配的导出声明代码文件。
5.根据权利要求2所述的方法,其特征在于,对所述AST进行遍历以提取所述单文件ES模块代码中具名导出的标识符数组,包括:
在遍历所述AST过程中,确定当前节点;
遍历所述当前节点的节点属性下的说明属性,并将所述说明属性每一项导出属性下的名称属性存储在预建立的空数组中;
返回执行确定当前节点的操作,直至对所述AST的全部节点遍历完毕,获取所述标识符数组。
6.根据权利要求2所述的方法,其特征在于,每项数组元素还具有第三属性,所述第三属性用于为标识符设置重命名前缀;
根据所述标识符数组生成与所述当前第三方工具函数库匹配的样板代码,包括:
根据所述当前处理数组元素的所述第三属性,为所述标识符数组中各标识符设置重命名前缀,生成各新标识符;
利用预设符号将所述各新标识符拼接成字符串;
将所述字符串和当前第三方工具函数库名称进行拼接,生成所述样板代码。
7.根据权利要求1所述的方法,其特征在于,在对所述当前第三方工具函数库进行处理以生成与所述当前第三方工具函数库匹配的样板代码之后,还包括:
将所述样板代码赋值给对应数组元素的第四属性;
根据所述当前处理数组元素的所述第一属性确定目标项目子文件,并将所述样板代码导入所述目标项目子文件的目标位置,包括:
根据所述当前处理数组元素的所述第一属性和项目子文件的身份标识,将所述当前处理数组元素与项目子文件进行匹配;
将与所述当前处理数组元素匹配成功的项目子文件确定为所述目标项目子文件;
将所述当前处理数组元素的第四属性的属性值导入所述目标项目子文件内容之前。
8.一种样板代码导入装置,其特征在于,包括:
配置数组获取模块,用于获取配置数组;所述配置数组的每项数组元素表示对项目文件中项目子文件进行样板代码导入的配置规则,每项数组元素具有第一属性和第二属性,所述第一属性用于匹配项目子文件,所述第二属性用于指示第三方工具函数库;
当前处理对象确定模块,用于确定所述配置数组中的当前处理数组元素,并根据所述当前处理数组元素的所述第二属性确定当前第三方工具函数库;
样板代码生成模块,用于对所述当前第三方工具函数库进行处理以生成与所述当前第三方工具函数库匹配的样板代码;
样板代码导入模块,用于根据所述当前处理数组元素的所述第一属性确定目标项目子文件,并将所述样板代码导入所述目标项目子文件的目标位置。
9.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的样板代码导入方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-7中任一项所述的样板代码导入方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311171429.2A CN117215560A (zh) | 2023-09-11 | 2023-09-11 | 一种样板代码导入方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311171429.2A CN117215560A (zh) | 2023-09-11 | 2023-09-11 | 一种样板代码导入方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117215560A true CN117215560A (zh) | 2023-12-12 |
Family
ID=89050546
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311171429.2A Pending CN117215560A (zh) | 2023-09-11 | 2023-09-11 | 一种样板代码导入方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117215560A (zh) |
-
2023
- 2023-09-11 CN CN202311171429.2A patent/CN117215560A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110515896B (zh) | 模型资源管理方法、模型文件制作方法、装置和系统 | |
CN113079198B (zh) | 一种云平台接口协议转换的方法及装置 | |
CN109558525A (zh) | 一种测试数据集的生成方法、装置、设备和存储介质 | |
CN113238740B (zh) | 代码生成方法、代码生成装置、存储介质及电子设备 | |
CN111966633A (zh) | 用于查询目录下子节点的方法、装置、电子设备及介质 | |
CN114760369A (zh) | 一种协议元数据提取方法、装置、设备及存储介质 | |
CN106293862B (zh) | 一种可扩展标记语言xml数据的解析方法和装置 | |
CN117215560A (zh) | 一种样板代码导入方法、装置、设备及存储介质 | |
CN116009847A (zh) | 代码生成方法、装置、电子设备及存储介质 | |
CN115577689A (zh) | 一种表格组件的生成方法、装置、设备及介质 | |
CN115687717A (zh) | Grok表达式获取方法、装置、设备及计算机可读存储介质 | |
CN115328898A (zh) | 一种数据处理方法、装置、电子设备及介质 | |
CN112130860B (zh) | Json对象解析方法、装置、电子设备及存储介质 | |
CN114443802A (zh) | 一种接口文档处理方法、装置、电子设备和存储介质 | |
CN116954518B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN116303370B (zh) | 一种脚本血缘解析方法、装置、存储介质、设备及产品 | |
CN114611155B (zh) | 一种数据治理节点的校验方法、装置、设备及介质 | |
CN117270912A (zh) | 一种配置更新方法、装置、电子设备及存储介质 | |
CN115599823A (zh) | 微服务场景下数据的获取方法、装置、设备及存储介质 | |
CN115934101A (zh) | 一种接口文档生成方法、装置、介质以及电子设备 | |
CN115952103A (zh) | 一种测试脚本编辑方法、装置、介质以及电子设备 | |
CN116489231A (zh) | Noc总线网络中路由信息配置方法、装置、设备及介质 | |
CN118170430A (zh) | 一种调用链路的处理方法、装置、设备及存储介质 | |
CN115757928A (zh) | 数据查询方法、装置、电子设备和存储介质 | |
CN116050351A (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 |