基于Javascript的代码打包方法、装置及介质
技术领域
本发明涉及计算机技术领域,具体而言,本发明涉及一种基于Javascript的代码打包方法、装置及介质。
背景技术
目前的js打包工具都是基于模块化的,并未对模块内的引用作特别的处理,因此,当众多模块一起打包的时候,很多模块内的引用会大概率出现重复出现的情况,导致打包了很多冗余的代码,导致代码体积变大,导致页面加载变慢,影响页面性能。
发明内容
本发明针对现有方式的缺点,提出了一种基于Javascript的代码打包方法、装置及介质。
为解决上述技术问题,本发明第一方面提供基于Javascript的代码打包方法,该方法包括:
指向待打包文件的js文件引用项并获取所述js文件引用项对应的值;
判断所述js文件引用项对应的值中是否包括相同的字段,若是,则从相同的字段中保留一个字段;
试运行所述待打包文件,以使得方法调用栈中保留所述待打包文件中的所有被执行的函数的名称;
读取待打包文件中的所有原始函数名称;
将所述所有原始函数名称与所述所有被执行的函数的名称作对比并生成对比结果;
基于所述对比结果,从所述所有原始函数名称中筛选出除所有被执行的函数的名称之外的函数名称;
将所述除所有被执行的函数的名称之外的函数名称对应的函数代码删除,并生成整合后的打包文件。
作为一种可选的实施方式,在所述生成整合后的打包文件之后,所述方法还包括:
使用编译器编译所述整合后的打包文件;
获取编译器编译所述整合后的打包文件所产生的编译信息;
根据所述编译信息判断所述整合后的打包文件是否通过编译,若是,则生成整合成功提示并生成可发布文件,若不是,则生成整合失败提示,其中,所述整合失败提示包括出错代对应的报错信息。
作为一种可选的实施方式,在所述使用编译器编译所述整合后的打包文件之前,所述方法还包括:
获取编译镜像文件,应用所述编译镜像文件创建一个编译器,在所述编译器的配置文件中设置所述整合后的打包文件的编辑配置信息、所述整合后的打包文件的项目属性信息、所述整合后的打包文件的打包配置信息;
以及,所述使用编译器编译所述整合后的打包文件,包括:
根据所述编译器的配置文件,使用编译器编译所述整合后的打包文件。
作为一种可选的实施方式,所述整合后的打包文件的项目属性信息包括项目名称、版本信息、代码仓库或者依赖项目中的至少一个。
作为一种可选的实施方式,所述整合后的打包文件的编辑配置信息包括设定编译指令、执行条件、执行目标或者编译参数中的至少一个。
作为一种可选的实施方式,所述整合后的打包文件的打包配置信息包括镜像仓库地址、创建镜像指令流程、打包代码的镜像目录、设定是否打包选项中的至少一个。
作为一种可选的实施方式,在所述试运行所述待打包文件之前,所述方法还包括:
判断所述方法调用栈中是否存在所述待打包文件的实例,若是,则删除已存在的实例,并重新创建待打包文件的实例。
本发明第二方面提供一种基于Javascript的代码打包装置,该装置包括:
获取模块,用于指向待打包文件的js文件引用项并获取所述js文件引用项对应的值;
判断模块,用于在所述获取模块获取所述js文件引用项对应的值之后,判断所述js文件引用项对应的值中是否包括相同的字段,若是,则从相同的字段中保留一个字段;
试运行模块,用于试运行所述待打包文件,以使得方法调用栈中保留所述待打包文件中的所有被执行的函数的名称;
读取模块,用于在试运行模块试运行所述待打包文件之后,读取待打包文件中的所有原始函数名称;
比较模块,用于在所述读取模块读取待打包文件中的所有原始函数名称之后,将所述所有原始函数名称与所述所有被执行的函数的名称作对比并生成对比结果;
筛选模块,用基于所述比较模块的对比结果,从所述所有原始函数名称中筛选出除所有被执行的函数的名称之外的函数名称;
整合模块,用于将所述除所有被执行的函数的名称之外的函数名称对应的函数代码删除,并生成整合后的打包文件。
作为一种可选的实施方式,所述装置包括编译模块,所述编译模块包括编译子模块、获取子模块、判断子模块、提示生成子模块、打包子模块,其中:
编译子模块,用于使用编译器编译所述整合后的打包文件;
获取子模块,用于在编译子模块使用编译器编译所述整合后的打包文件之后,获取编译器编译所述整合后的打包文件所产生的编译信息;
判断子模块,用于在获取子模块获取编译器编译所述整合后的打包文件所产生的编译信息之后,根据所述编译信息判断所述整合后的打包文件是否通过编译;
提示生成子模块,用于在判断子模块判断出所述整合后的打包文件通过时,生成整合成功提示,以及,用于在判断子模块判断出所述整合后的打包文件不通过时,则生成整合失败提示,其中,所述整合失败提示包括出错代对应的报错信息;
打包子模块,用于在在判断子模块判断出所述整合后的打包文件通过时,生成可发布文件。
作为一种可选的实施方式,获取模块,还用于在编译子模块使用编译器编译所述整合后的打包文件之前,获取编译镜像文件,应用所述编译镜像文件创建一个编译器,在所述编译器的配置文件中设置所述整合后的打包文件的编辑配置信息、所述整合后的打包文件的项目属性信息、所述整合后的打包文件的打包配置信息;
以及,编译子模块执行使用编译器编译所述整合后的打包文件程序的具体方式包括步骤:
根据所述编译器的配置文件,使用编译器编译所述整合后的打包文件。
作为一种可选的实施方式,所述整合后的打包文件的项目属性信息包括项目名称、版本信息、代码仓库或者依赖项目中的至少一个。
作为一种可选的实施方式,所述整合后的打包文件的编辑配置信息包括设定编译指令、执行条件、执行目标或者编译参数中的至少一个。
作为一种可选的实施方式,所述整合后的打包文件的打包配置信息包括镜像仓库地址、创建镜像指令流程、打包代码的镜像目录、设定是否打包选项中的至少一个。
作为一种可选的实施方式,所述装置还包括删除模块、创建模块,其中:
判断模块还用于在试运行模块试运行所述待打包文件之前,判断所述方法调用栈中是否存在所述待打包文件的实例;
删除模块,用于在判断模块判断出所述方法调用栈中存在所述待打包文件的实例时,删除已存在的实例;
创建模块,用于在判断模块判断出所述方法调用栈中存在所述待打包文件的实例时,重新创建待打包文件的实例。
本发明第三方面还提供另一种基于Javascript的代码打包装置,该装置包括:
处理器;以及
存储器,配置用于存储机器可读指令,所述指令在由所述处理器执行时,使得所述处理器执行如本发明第一方面所述的基于Javascript的代码打包方法。
本发明第四方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序程序被处理器执行如本发明第一方面所述的基于Javascript的代码打包方法。
与现有技术相比,本发明具有如下有益效果:
本发明的方法能够对待打包文件进行观察分析,提取待打包文件中的相同引用进行过滤去重处理,即当发现待打包文件中的方法未被引用时,对未被引用的方法(函数)对应的冗余代码进行剔除过滤。因此,本发明通过在待打包文件编译过程中进行二次处理,在保证待打包文件的代码的高完整度情况下,确保待打包文件的代码的利用率达到最高,从而减小待打包文件的代码体积,进而提供待打包文件在网页中的被加载速度,从而让提高用户体验。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1是本发明实施例一提供的一种基于Javascript的代码打包方法的流程示意图;
图2是本发明实施例二提供的一种基于Javascript的代码打包装置的结构示意图;
图3是本发明实施例三提供的一种基于Javascript的代码打包装置的结构示意图。
具体实施方式
下面详细描述本发明,本发明的实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的部件或具有相同或类似功能的部件。此外,如果已知技术的详细描述对于示出的本发明的特征是不必要的,则将其省略。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
下面以具体地实施例对本发明的技术方案以及本发明的技术方案如何解决上述技术问题进行详细说明。
实施例一
如图1所示,图1是本发明实施一提供的一种基于Javascript的代码打包方法的流程示意图,其中,该方法包括步骤:
101、指向待打包文件的js文件引用项并获取所述js文件引用项对应的值;
102、判断所述js文件引用项对应的值中是否包括相同的字段,若是,则从相同的字段中保留一个字段;
103、试运行所述待打包文件,以使得方法调用栈中保留所述待打包文件中的所有被执行的函数的名称;
104、读取待打包文件中的所有原始函数名称;
105、将所述所有原始函数名称与所述所有被执行的函数的名称作对比并生成对比结果;
106、基于所述对比结果,从所述所有原始函数名称中筛选出除所有被执行的函数的名称之外的函数名称;
107、将所述除所有被执行的函数的名称之外的函数名称对应的函数代码删除,并生成整合后的打包文件。
示例性地,假设有一个待打包文件“test.js”,其中,在“test.js”有一个属性名为“script”的属性,该属性标识打包文件所引用的js文件的路径,该属性值为http://test1.js;http://test2.js;http://test3.js;http://test1.js,从中,可以知道该打包文件重复引用了“test1.js”这个文件,为了解决这个问题,本发明能够获取scipt属性的所有属性值,并判断所有属性值中是否存在相同的字段,若是,将从相同的字段中保留一个字段并删除多余的字段,以实现待打包文件不重复引用相同的js文件。
再示例性的,假设不同的js文件中可能存在相同的功能函数,该相同的功能函数实现相同的功能、并且实现的逻辑也相同,为了进一步降低打包文件的冗余度,本发明能够从相同的功能函数中保留一个功能函数,并删除多余的功能函数。
作为一种可选的实施方式,在所述生成整合后的打包文件之后,所述方法还包括:
使用编译器编译所述整合后的打包文件;
获取编译器编译所述整合后的打包文件所产生的编译信息;
根据所述编译信息判断所述整合后的打包文件是否通过编译,若是,则生成整合成功提示并生成可发布文件,若不是,则生成整合失败提示,其中,所述整合失败提示包括出错代对应的报错信息。
作为一种可选的实施方式,在所述使用编译器编译所述整合后的打包文件之前,所述方法还包括:
获取编译镜像文件,应用所述编译镜像文件创建一个编译器,在所述编译器的配置文件中设置所述整合后的打包文件的编辑配置信息、所述整合后的打包文件的项目属性信息、所述整合后的打包文件的打包配置信息;
以及,所述使用编译器编译所述整合后的打包文件,包括:
根据所述编译器的配置文件,使用编译器编译所述整合后的打包文件。
作为一种可选的实施方式,所述整合后的打包文件的项目属性信息包括项目名称、版本信息、代码仓库或者依赖项目中的至少一个。
作为一种可选的实施方式,所述整合后的打包文件的编辑配置信息包括设定编译指令、执行条件、执行目标或者编译参数中的至少一个。
作为一种可选的实施方式,所述整合后的打包文件的打包配置信息包括镜像仓库地址、创建镜像指令流程、打包代码的镜像目录、设定是否打包选项中的至少一个。
作为一种可选的实施方式,在所述试运行所述待打包文件之前,所述方法还包括:
判断所述方法调用栈中是否存在所述待打包文件的实例,若是,则删除已存在的实例,并重新创建待打包文件的实例。
本发明实施例的一种基于Javascript的代码打包方法,能够对待打包文件进行观察分析,提取待打包文件中的相同引用进行过滤去重处理,即当发现待打包文件中的方法未被引用时,对未被引用的方法(函数)对应的冗余代码进行剔除过滤。因此,本发明通过在待打包文件编译过程中进行二次处理,在保证待打包文件的代码的高完整度情况下,确保待打包文件的代码的利用率达到最高,从而减小待打包文件的代码体积,进而提供待打包文件在网页中的被加载速度,从而让提高用户体验。
实施例二
如图2所示,图2是本发明实施例二提供的一种基于Javascript的代码打包装置的结构示意图,所述装置包括:
获取模块201,用于指向待打包文件的js文件引用项并获取所述js文件引用项对应的值;
判断模块202,用于在所述获取模块201获取所述js文件引用项对应的值之后,判断所述js文件引用项对应的值中是否包括相同的字段,若是,则从相同的字段中保留一个字段;需要说明的是,判断模块202执行完毕后,可以触发试运行模块203运行。
试运行模块203,用于试运行所述待打包文件,以使得方法调用栈中保留所述待打包文件中的所有被执行的函数的名称;
读取模块204,用于在试运行模块203试运行所述待打包文件之后,读取待打包文件中的所有原始函数名称;
比较模块205,用于在所述读取模块204读取待打包文件中的所有原始函数名称之后,将所述所有原始函数名称与所述所有被执行的函数的名称作对比并生成对比结果;
筛选模块206,用基于所述比较模块205的对比结果,从所述所有原始函数名称中筛选出除所有被执行的函数的名称之外的函数名称;
整合模块207,用于将所述除所有被执行的函数的名称之外的函数名称对应的函数代码删除,并生成整合后的打包文件。
示例性地,假设有一个待打包文件“test.js”,其中,在“test.js”有一个属性名为“script”的属性,该属性标识打包文件所引用的js文件的路径,该属性值为http://test1.js;http://test2.js;http://test3.js;http://test1.js,从中,可以知道该打包文件重复引用了“test1.js”这个文件,为了解决这个问题,本发明能够获取scipt属性的所有属性值,并判断所有属性值中是否存在相同的字段,若是,将从相同的字段中保留一个字段并删除多余的字段,以实现待打包文件不重复引用相同的js文件。
再示例性的,假设不同的js文件中可能存在相同的功能函数,该相同的功能函数实现相同的功能、并且实现的逻辑也相同,为了进一步降低打包文件的冗余度,本发明能够从相同的功能函数中保留一个功能函数,并删除多余的功能函数。
作为一种可选的实施方式,所述装置包括编译模块,所述编译模块包括编译子模块、获取子模块、判断子模块、提示生成子模块、打包子模块,其中:
编译子模块,用于使用编译器编译所述整合后的打包文件;
获取子模块,用于在编译子模块使用编译器编译所述整合后的打包文件之后,获取编译器编译所述整合后的打包文件所产生的编译信息;
判断子模块,用于在获取子模块获取编译器编译所述整合后的打包文件所产生的编译信息之后,根据所述编译信息判断所述整合后的打包文件是否通过编译;
提示生成子模块,用于在判断子模块判断出所述整合后的打包文件通过时,生成整合成功提示,以及,用于在判断子模块判断出所述整合后的打包文件不通过时,则生成整合失败提示,其中,所述整合失败提示包括出错代对应的报错信息;
打包子模块,用于在在判断子模块判断出所述整合后的打包文件通过时,生成可发布文件。
作为一种可选的实施方式,获取模块,还用于在编译子模块使用编译器编译所述整合后的打包文件之前,获取编译镜像文件,应用所述编译镜像文件创建一个编译器,在所述编译器的配置文件中设置所述整合后的打包文件的编辑配置信息、所述整合后的打包文件的项目属性信息、所述整合后的打包文件的打包配置信息;
以及,编译子模块执行使用编译器编译所述整合后的打包文件程序的具体方式包括步骤:
根据所述编译器的配置文件,使用编译器编译所述整合后的打包文件。
作为一种可选的实施方式,所述整合后的打包文件的项目属性信息包括项目名称、版本信息、代码仓库或者依赖项目中的至少一个。
作为一种可选的实施方式,所述整合后的打包文件的编辑配置信息包括设定编译指令、执行条件、执行目标或者编译参数中的至少一个。
作为一种可选的实施方式,所述整合后的打包文件的打包配置信息包括镜像仓库地址、创建镜像指令流程、打包代码的镜像目录、设定是否打包选项中的至少一个。
作为一种可选的实施方式,所述装置还包括删除模块、创建模块,其中:
判断模块还用于在试运行模块试运行所述待打包文件之前,判断所述方法调用栈中是否存在所述待打包文件的实例;
删除模块,用于在判断模块判断出所述方法调用栈中存在所述待打包文件的实例时,删除已存在的实例;
创建模块,用于在判断模块判断出所述方法调用栈中存在所述待打包文件的实例时,重新创建待打包文件的实例。
本发明实施例的一种基于Javascript的代码打包装置通过执行一种基于Javascript的代码打包方法,能够对待打包文件进行观察分析,提取待打包文件中的相同引用进行过滤去重处理,即当发现待打包文件中的方法未被引用时,对未被引用的方法(函数)对应的冗余代码进行剔除过滤。因此,本发明通过在待打包文件编译过程中进行二次处理,在保证待打包文件的代码的高完整度情况下,确保待打包文件的代码的利用率达到最高,从而减小待打包文件的代码体积,进而提供待打包文件在网页中的被加载速度,从而让提高用户体验。
实施例三
如图3所示,图3是本发明实施例三提供的一种基于Javascript的代码打包装置的结构示意图,所述装置包括:
处理器302;以及
存储器301,配置用于存储机器可读指令,所述指令在由所述处理器302执行时,使得所述处理器302执行如本发明实施例一所述的一种基于Javascript的代码打包方法。
本发明实施例的一种基于Javascript的代码打包装置通过执行一种基于Javascript的代码打包方法,能够对待打包文件进行观察分析,提取待打包文件中的相同引用进行过滤去重处理,即当发现待打包文件中的方法未被引用时,对未被引用的方法(函数)对应的冗余代码进行剔除过滤。因此,本发明通过在待打包文件编译过程中进行二次处理,在保证待打包文件的代码的高完整度情况下,确保待打包文件的代码的利用率达到最高,从而减小待打包文件的代码体积,进而提供待打包文件在网页中的被加载速度,从而让提高用户体验。
实施例四
本发明实施例四提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序程序被处理器执行如本发明实施例一所述的一种基于Javascript的代码打包方法。
本发明实施例的计算机可读存储介质通过执行一种基于Javascript的代码打包方法,能够对待打包文件进行观察分析,提取待打包文件中的相同引用进行过滤去重处理,即当发现待打包文件中的方法未被引用时,对未被引用的方法(函数)对应的冗余代码进行剔除过滤。因此,本发明通过在待打包文件编译过程中进行二次处理,在保证待打包文件的代码的高完整度情况下,确保待打包文件的代码的利用率达到最高,从而减小待打包文件的代码体积,进而提供待打包文件在网页中的被加载速度,从而让提高用户体验。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
在本发明的描述中,需要理解的是,术语“中心”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个及以上。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
在本说明书的描述中,具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。