CN106874394A - 一种文件打包预处理的方法与设备 - Google Patents
一种文件打包预处理的方法与设备 Download PDFInfo
- Publication number
- CN106874394A CN106874394A CN201710026438.0A CN201710026438A CN106874394A CN 106874394 A CN106874394 A CN 106874394A CN 201710026438 A CN201710026438 A CN 201710026438A CN 106874394 A CN106874394 A CN 106874394A
- Authority
- CN
- China
- Prior art keywords
- submodule
- bag
- reference information
- relying
- dependence
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的目的是提供一种文件打包预处理的方法与设备。具体地,获取待被打包处理的初始源文件;确定初始源文件中的依赖包及该依赖包的至少一个引用信息;若满足至少一个引用信息均是对依赖包中的子模块的引用的触发条件,记录依赖包中各子模块的引用信息;确定各子模块中属于子模块导出的子模块的导出路径;根据记录的依赖包中各子模块的引用信息与所述导出路径,对初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。与现有技术相比,本发明在打包时剔除依赖包中未引用的子模块,减小包大小,从而减小文件体积,提高资源利用率,提升文件打包效率。相应地,也减少了用户端白屏时间,节省带宽成本。
Description
技术领域
本发明涉及文件打包技术领域,尤其涉及一种文件打包预处理的技术。
背景技术
将文件进行打包处理(也即,把一个或者多个文件用压缩软件进行压缩,压制成一个压缩文件包:一个解包文件,一个内容文件),既可以节省空间,又方便网络间传送。而在目前的打包工具中,均是将包(package)作为拆分的最小粒度,这样虽然比较简单,但是会导致打包后的文件体积比较大,并且存在一个包内的某些模块并没有被使用的现象,从而造成资源浪费。而当一个包足够大时,生成的包中的无用模块是相当可观的,资源浪费更加严重。
发明内容
本发明的一个目的是提供一种文件打包预处理的方法与设备。
根据本发明的一个方面,提供了一种文件打包预处理方法,其中,该方法包括:
获取待被打包处理的初始源文件;
确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息;
若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录所述依赖包中各子模块的引用信息;
确定所述各子模块中属于子模块导出的子模块的导出路径;
根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。
根据本发明的另一方面,还提供了一种文件打包预处理设备,其中,该设备包括:
用于获取待被打包处理的初始源文件的装置;
用于确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息的装置;
用于若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录所述依赖包中各子模块的引用信息的装置;
用于确定所述各子模块中属于子模块导出的子模块的导出路径的装置;
用于根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理的装置。
根据本发明的还一个方面,还提供了一种文件打包工具,其中,该文件打包工具包括如前述根据本发明另一个方面的一种文件打包预处理设备。
与现有技术相比,本发明的一个实施例通过确定待被打包处理的初始源文件中依赖包的各子模块中属于子模块导出的子模块的导出路径,以及在依赖包的引用信息均是对其中子模块的引用的情形下,将初始源文件进行相关替换处理,以在打包时剔除依赖包中未引用的子模块,减小包大小,从而减小文件体积,提高资源利用率,提升文件打包效率。相应地,也减少了用户端白屏时间,节省带宽成本。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出根据本发明一个方面的一种用于文件打包预处理的设备示意图;
图2示出根据本发明另一个方面的一种用于文件打包预处理的方法流程图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
图1示出根据本发明一个方面的一种用于文件打包预处理的设备1,其中,设备1包括用于获取待被打包处理的初始源文件的装置(以下简称“文件获取装置11”);用于确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息的装置(以下简称“第一确定装置12”);用于若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录所述依赖包中各子模块的引用信息的装置(以下简称“记录装置13”);用于确定所述各子模块中属于子模块导出的子模块的导出路径的装置(以下简称“第二确定装置14”);用于根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理的装置(以下简称“替换装置15”)。
具体地,文件获取装置11获取待被打包处理的初始源文件;第一确定装置12确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息;若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录装置13所述依赖包中各子模块的引用信息;第二确定装置14确定所述各子模块中属于子模块导出的子模块的导出路径;替换装置15根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。
设备1用于对待被打包处理的文件进行预处理,其可以由文件打包工具实现,如前端打包工具,在具体实施例中,设备1包括但不限于网络设备、用户设备或网络设备与用户设备通过网络相集成所构成的设备。在此,所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现;或者由用户设备实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。在此,所述用户设备可以是任何一种可与用户通过键盘、触摸板、触摸屏、或手写设备等方式进行人机交互的电子产品,例如PC、手机、智能手机、PDA、可穿戴设备、掌上电脑PPC或平板电脑等。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。本领域技术人员应能理解上述设备1仅为举例,其他现有的或今后可能出现的网络设备或用户设备如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。在此,网络设备及用户设备均包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。
具体地,文件获取装置11通过诸如打包工具自身提供的提供待被打包处理文件的应用程序接口(API),获取待被打包处理的初始源文件;或者,通过获取用户导入的待被打包处理的文件的方式,来获取待被打包处理的初始源文件。在此,本领域技术人员应当理解,所述初始源文件的格式并不受限制,优选地,所述初始源文件包括前端编译文件。
例如,假设用户A预对文件夹A进行打包处理,在某打包工具中点击了打包处理按钮以提交文件打包处理请求,然后选择了文件夹A,则文件获取装置11通过打包工具自身提供的提供待被打包处理文件的应用程序接口(API),便可获取待被打包处理的初始源文件,即文件夹A。
本领域技术人员应能理解上述获取待被打包处理的初始源文件的方式仅为举例,其他现有的或今后可能出现的获取待被打包处理的初始源文件的方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。
第一确定装置12通过诸如抽象语法树(AST,Abstract Syntax Tree),对所述初始源文件进行静态语法分析,以确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息。
在此,所述依赖包是指所述初始源文件中引入的包,其可来源于其他文件。
例如,接上例,第一确定装置12对文件夹A通过AST进行静态语法分析,获取到文件夹A中有以下import和/或require声明:
声明1):
import{ModuleA1,ModuleB1}from‘packageA’
console.log(ModuleA1,ModuleB1)//对子模块的引用
声明2):
import*as packageB from‘packageB’
console.log(package.ModuleA2,package.moduleB2)//对子模块的引用声明3):
var packageC=require(‘packageC’)
console.log(packageC.ModuleA3,package.moduleB3)//对子模块的引用则第一确定装置12可根据以上import和require声明,确定文件夹A中具有依赖包packageA、packageB和packageC,其引用信息分别为console.log(ModuleA1,ModuleB1)、console.log(package.ModuleA2,package.moduleB2)、console.log(packageC.ModuleA3,package.moduleB3)。
本领域技术人员应能理解上述确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息的方式仅为举例,其他现有的或今后可能出现的确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息的方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。
若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录装置13所述依赖包中各子模块的引用信息。在此,所述至少一个引用信息均是对所述依赖包中的子模块的引用含义包括:1)所述至少一个引用信息均是对所述依赖包中一个或多个子模块的引用;2)所述至少一个引用信息均是对所述依赖包中所有子模块的引用。
例如,还接上例,对于文件夹A中包含的依赖包packageA、packageB和packageC,假设依赖包packageA中仅具有子模块A1和B1,依赖包packageB中仅具有子模块A2和B2,依赖包packageC中仅具有子模块A3和B3,则关于依赖包packageA、依赖包packageB、依赖包packageC的引用信息均是对其中子模块的引用,则记录装置13分别记录依赖包packageA、依赖包packageB、依赖包packageC中各子模块的引用信息,如以表格形式进行记录;再如,假设依赖包packageB还具有子模块C2,而依赖包packageA中仅具有子模块A1和B1,依赖包packageC中仅具有子模块A3和B3,则记录装置13仅记录依赖包packageA、和依赖包packageC中各子模块的引用信息;还如,假设依赖包packageB还具有子模块C2、依赖包packageC还具有子模块C3,只有依赖包packageA中仅具有子模块A1和B1,则记录装置13仅记录依赖包packageA中各子模块的引用信息。
第二确定装置14确定所述各子模块中属于子模块导出的子模块的导出路径。在此,所述属于子模块导出的子模块是指导出路径为独立导出路径的子模块。
例如,假设记录装置13仅记录了依赖包packageA中各子模块的引用信息,则第二确定装置14可通过NodeJS的模块加载方案,首先通过require.resolve函数获取到依赖包packageA中子模块A1和B1的根目录;然后,再通过require函数获取到子模块A1和B1各自的输出;接着,再通过require.cache函数对子模块A1和B1的输出进行标记,以得到子模块A1和B1中哪个模块属于子模块导出的子模块,即将具有独立导出路径的子模块作为属于子模块导出的子模块,如得到子模块A1属于子模块导出的子模块,而子模块B1不属于子模块导出的子模块,并记录模块A1的导出路径如packageA/path/to/ModuleA1。在此,所述输出是指JavaScript脚本语言中定义的关于子模块的所有外界可访问的接口和属性,如exports。
替换装置15根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。
优选地,所述相关替换处理包括以下至少任一项:
-利用所述导出路径对所述初始源文件中关于所述依赖包的导入声明进行替换;
-利用记录的所述依赖包中各子模块的引用信息对所述初始源文件中关于所述依赖包中的子模块的引用信息进行替换。
例如,对于文件夹A,假设仅其中的依赖包packageA满足其至少一个引用信息均是对该依赖包中的子模块的引用的触发条件,依赖包packageB和packageC不满足该触发条件,且由于其中仅子模块A1属于子模块导出的子模块,子模块A1的导出路径为packageA/path/to/ModuleA1,则替换装置15可对文件夹A中关于依赖包packageA的导入声明即import声明1)进行替换,如将
import{ModuleA1,ModuleB1}from‘packageA’
替换为
var packageAModuleA1=require(‘packageA/path/to/ModuleA1’),
将文件夹A中关于依赖包packageA中的子模块A1和B1的引用信息console.log(ModuleA1,ModuleB1)
替换为console.log(packageAModuleA1,packageAModuleB1),
而对依赖包packageB和依赖包packageC的import和/或require声明以及关于相应依赖包中的子模块的引用信息不做替换。从而获得相应的目标源文件,以用于打包处理。
再如,仍以依赖包packageA为例进行说明,假设初始源文件中关于依赖包packageA的导入声明和依赖包packageA中的子模块的引用信息为:import*as packageAfrom‘packageA’
console.log(package.ModuleA1,package.moduleB1)
且子模块A1和B1均属于子模块导出的子模块,子模块B1的导出路径为packageA/path/to/ModuleB1,则替换装置15可将此替换为:
var packageAModuleA1=require(‘packageA/path/to/ModuleA1’)
var packageAModuleB1=require(‘packageA/path/to/ModuleB1’)
console.log(packageAModuleA1,packageAModuleB1)
还如,继续以依赖包packageA为例进行说明,假设初始源文件中关于依赖包packageA的导入声明和依赖包packageA中的子模块的引用信息为:var packageA=require(‘packageA’)
console.log(packageA.ModuleA1,package.moduleB1)
且子模块A1和B1均属于子模块导出的子模块,则替换装置15可将此替换为:
var packageAModuleA1=require(‘packageA/path/to/ModuleA1’)
var packageAModuleB1=require(‘packageA/path/to/ModuleB1’)
console.log(packageAModuleA1,packageAModuleB1)
在此,所述导入声明包括但不限于import声明、require声明等。
本领域技术人员应能理解上述相关替换处理的方式仅为举例,其他现有的或今后可能出现的相关替换处理的方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。
由此,本发明通过以上替换,剔除了依赖包内未引用的子模块,在后续的打包过程中可以只引入包中用到的子模块,没有用到的就不会被引入,从而减少了输出包的文件体积,提高了资源利用率,也提升了文件打包效率。相应地,也减少了用户端白屏时间,节省带宽成本。
优选地,设备1的各装置之间是持续不断工作的。具体地,文件获取装置11持续获取待被打包处理的初始源文件;第一确定装置12持续确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息;若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录装置13持续所述依赖包中各子模块的引用信息;第二确定装置14持续确定所述各子模块中属于子模块导出的子模块的导出路径;替换装置15持续根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。在此,本领域技术人员应理解所述“持续”是指设备1的各装置之间分别不断地进行初始源文件的获取、所述初始源文件中的依赖包及该依赖包的至少一个引用信息的确定、所述依赖包中各子模块的引用信息的记录、所述各子模块中属于子模块导出的子模块的导出路径的确定,以及对所述初始源文件进行相关替换处理,直至设备1在较长时间内停止获取所述初始源文件。
图2示出根据本发明另一个方面的一种用于文件打包预处理的方法流程图。
其中,该方法包括步骤S1、步骤S2、步骤S3、步骤S4和步骤S5。
具体地,在步骤S1中,设备1获取待被打包处理的初始源文件;在步骤S2中,设备1确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息;若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,在步骤S3中,设备1所述依赖包中各子模块的引用信息;在步骤S4中,设备1确定所述各子模块中属于子模块导出的子模块的导出路径;在步骤S5中,设备1根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。
设备1用于对待被打包处理的文件进行预处理,其可以由文件打包工具实现,如前端打包工具,在具体实施例中,设备1包括但不限于网络设备、用户设备或网络设备与用户设备通过网络相集成所构成的设备。在此,所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现;或者由用户设备实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。在此,所述用户设备可以是任何一种可与用户通过键盘、触摸板、触摸屏、或手写设备等方式进行人机交互的电子产品,例如PC、手机、智能手机、PDA、可穿戴设备、掌上电脑PPC或平板电脑等。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。本领域技术人员应能理解上述设备1仅为举例,其他现有的或今后可能出现的网络设备或用户设备如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。在此,网络设备及用户设备均包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(ASIC)、可编程门阵列(FPGA)、数字处理器(DSP)、嵌入式设备等。
具体地,在步骤S1中,设备1通过诸如打包工具自身提供的提供待被打包处理文件的应用程序接口(API),获取待被打包处理的初始源文件;或者,通过获取用户导入的待被打包处理的文件的方式,来获取待被打包处理的初始源文件。在此,本领域技术人员应当理解,所述初始源文件的格式并不受限制,优选地,所述初始源文件包括前端编译文件。
例如,假设用户A预对文件夹A进行打包处理,在某打包工具中点击了打包处理按钮以提交文件打包处理请求,然后选择了文件夹A,则在步骤S1中,设备1通过打包工具自身提供的提供待被打包处理文件的应用程序接口(API),便可获取待被打包处理的初始源文件,即文件夹A。
本领域技术人员应能理解上述获取待被打包处理的初始源文件的方式仅为举例,其他现有的或今后可能出现的获取待被打包处理的初始源文件的方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。
在步骤S2中,设备1通过诸如抽象语法树(AST,Abstract Syntax Tree),对所述初始源文件进行静态语法分析,以确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息。
在此,所述依赖包是指所述初始源文件中引入的包,其可来源于其他文件。
例如,接上例,在步骤S2中,设备1对文件夹A通过AST进行静态语法分析,获取到文件夹A中有以下import和/或require声明:声明1):
import{ModuleA1,ModuleB1}from‘packageA’
console.log(ModuleA1,ModuleB1)//对子模块的引用
声明2):
import*as packageB from‘packageB’
console.log(package.ModuleA2,package.moduleB2)//对子模块的引用声明3):
var packageC=require(‘packageC’)
console.log(packageC.ModuleA3,package.moduleB3)//对子模块的引用则在步骤S2中,设备1可根据以上import和require声明,确定文件夹A中具有依赖包packageA、packageB和packageC,其引用信息分别为console.log(ModuleA1,ModuleB1)、console.log(package.ModuleA2,package.moduleB2)、console.log(packageC.ModuleA3,package.moduleB3)。
本领域技术人员应能理解上述确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息的方式仅为举例,其他现有的或今后可能出现的确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息的方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。
若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,在步骤S3中,设备1所述依赖包中各子模块的引用信息。在此,所述至少一个引用信息均是对所述依赖包中的子模块的引用含义包括:1)所述至少一个引用信息均是对所述依赖包中一个或多个子模块的引用;2)所述至少一个引用信息均是对所述依赖包中所有子模块的引用。
例如,还接上例,对于文件夹A中包含的依赖包packageA、packageB和packageC,假设依赖包packageA中仅具有子模块A1和B1,依赖包packageB中仅具有子模块A2和B2,依赖包packageC中仅具有子模块A3和B3,则关于依赖包packageA、依赖包packageB、依赖包packageC的引用信息均是对其中子模块的引用,则在步骤S3中,设备1分别记录依赖包packageA、依赖包packageB、依赖包packageC中各子模块的引用信息,如以表格形式进行记录;再如,假设依赖包packageB还具有子模块C2,而依赖包packageA中仅具有子模块A1和B1,依赖包packageC中仅具有子模块A3和B3,则在步骤S3中,设备1仅记录依赖包packageA、和依赖包packageC中各子模块的引用信息;还如,假设依赖包packageB还具有子模块C2、依赖包packageC还具有子模块C3,只有依赖包packageA中仅具有子模块A1和B1,则在步骤S3中,设备1仅记录依赖包packageA中各子模块的引用信息。
在步骤S4中,设备1确定所述各子模块中属于子模块导出的子模块的导出路径。在此,所述属于子模块导出的子模块是指导出路径为独立导出路径的子模块。
例如,假设在步骤S3中,设备1仅记录了依赖包packageA中各子模块的引用信息,则在步骤S4中,设备1可通过NodeJS的模块加载方案,首先通过require.resolve函数获取到依赖包packageA中子模块A1和B1的根目录;然后,再通过require函数获取到子模块A1和B1各自的输出;接着,再通过require.cache函数对子模块A1和B1的输出进行标记,以得到子模块A1和B1中哪个模块属于子模块导出的子模块,即将具有独立导出路径的子模块作为属于子模块导出的子模块,如得到子模块A1属于子模块导出的子模块,而子模块B1不属于子模块导出的子模块,并记录模块A1的导出路径如packageA/path/to/ModuleA1。在此,所述输出是指JavaScript脚本语言中定义的关于子模块的所有外界可访问的接口和属性,如exports。
在步骤S5中,设备1根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。
优选地,所述相关替换处理包括以下至少任一项:
-利用所述导出路径对所述初始源文件中关于所述依赖包的导入声明进行替换;
-利用记录的所述依赖包中各子模块的引用信息对所述初始源文件中关于所述依赖包中的子模块的引用信息进行替换。
例如,对于文件夹A,假设仅其中的依赖包packageA满足其至少一个引用信息均是对该依赖包中的子模块的引用的触发条件,依赖包packageB和packageC不满足该触发条件,且由于其中仅子模块A1属于子模块导出的子模块,子模块A1的导出路径为packageA/path/to/ModuleA1,则在步骤S5中,设备1可对文件夹A中关于依赖包packageA的导入声明即import声明1)进行替换,如将
import{ModuleA1,ModuleB1}from‘packageA’
替换为
var packageAModuleA1=require(‘packageA/path/to/ModuleA1’),
将文件夹A中关于依赖包packageA中的子模块A1和B1的引用信息console.log(ModuleA1,ModuleB1)
替换为console.log(packageAModuleA1,packageAModuleB1),
而对依赖包packageB和依赖包packageC的import和/或require声明以及关于相应依赖包中的子模块的引用信息不做替换。从而获得相应的目标源文件,以用于打包处理。
再如,仍以依赖包packageA为例进行说明,假设初始源文件中关于依赖包packageA的导入声明和依赖包packageA中的子模块的引用信息为:import*as packageAfrom‘packageA’
console.log(package.ModuleA1,package.moduleB1)
且子模块A1和B1均属于子模块导出的子模块,子模块B1的导出路径为packageA/path/to/ModuleB1,则在步骤S5中,设备1可将此替换为:
var packageAModuleA1=require(‘packageA/path/to/ModuleA1’)
var packageAModuleB1=require(‘packageA/path/to/ModuleB1’)
console.log(packageAModuleA1,packageAModuleB1)
还如,继续以依赖包packageA为例进行说明,假设初始源文件中关于依赖包packageA的导入声明和依赖包packageA中的子模块的引用信息为:var packageA=require(‘packageA’)
console.log(packageA.ModuleA1,package.moduleB1)
且子模块A1和B1均属于子模块导出的子模块,则在步骤S5中,设备1可将此替换为:
var packageAModuleA1=require(‘packageA/path/to/ModuleA1’)
var packageAModuleB1=require(‘packageA/path/to/ModuleB1’)
console.log(packageAModuleA1,packageAModuleB1)
在此,所述导入声明包括但不限于import声明、require声明等。
本领域技术人员应能理解上述相关替换处理的方式仅为举例,其他现有的或今后可能出现的相关替换处理的方式如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。
由此,本发明通过以上替换,剔除了依赖包内未引用的子模块,在后续的打包过程中可以只引入包中用到的子模块,没有用到的就不会被引入,从而减少了输出包的文件体积,提高了资源利用率,也提升了文件打包效率。相应地,也减少了用户端白屏时间,节省带宽成本。
优选地,设备1的各步骤之间是持续不断工作的。具体地,在步骤S1中,设备1持续获取待被打包处理的初始源文件;在步骤S2中,设备1持续确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息;若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,在步骤S3中,设备1持续所述依赖包中各子模块的引用信息;在步骤S4中,设备1持续确定所述各子模块中属于子模块导出的子模块的导出路径;在步骤S5中,设备1持续根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。在此,本领域技术人员应理解所述“持续”是指设备1的各步骤之间分别不断地进行初始源文件的获取、所述初始源文件中的依赖包及该依赖包的至少一个引用信息的确定、所述依赖包中各子模块的引用信息的记录、所述各子模块中属于子模块导出的子模块的导出路径的确定,以及对所述初始源文件进行相关替换处理,直至设备1在较长时间内停止获取所述初始源文件。
需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本发明的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本发明的方法和/或技术方案。而调用本发明的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本发明的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本发明的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (13)
1.一种文件打包预处理方法,其中,该方法包括:
获取待被打包处理的初始源文件;
确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息;
若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录所述依赖包中各子模块的引用信息;
确定所述各子模块中属于子模块导出的子模块的导出路径;
根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理。
2.根据权利要求1所述的方法,其中,所述相关替换处理包括以下至少任一项:
-利用所述导出路径对所述初始源文件中关于所述依赖包的导入声明进行替换;
-利用记录的所述依赖包中各子模块的引用信息对所述初始源文件中关于所述依赖包中的子模块的引用信息进行替换。
3.根据权利要求1或2所述的方法,其中,确定所述各子模块中属于子模块导出的子模块的导出路径包括:
-获取所述依赖包的各子模块的根目录;
-获取所述依赖包的各子模块的输出;
-根据所述根目录,并结合所述输出,确定所述各子模块的导出路径;
-根据所述各子模块的导出路径,确定所述各子模块中属于子模块导出的子模块,以得到属于子模块导出的子模块的导出路径。
4.根据权利要求1至3中任一项所述的方法,其中,确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息包括:
对所述初始源文件进行静态语法分析,以确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息。
5.根据权利要求1至4中任一项所述的方法,其中,所述初始源文件包括前端编译文件。
6.根据权利要求1至5中任一项所述的方法,其中,若所述初始源文件中具有多个依赖包,其中,若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录所述依赖包中各子模块的引用信息还包括:
若满足多个所述依赖包中至少一个依赖包的至少一个引用信息均是对该依赖包中的子模块的引用的触发条件,记录该依赖包中各子模块的引用信息。
7.一种文件打包预处理设备,其中,该设备包括:
用于获取待被打包处理的初始源文件的装置;
用于确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息的装置;
用于若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录所述依赖包中各子模块的引用信息的装置;
用于确定所述各子模块中属于子模块导出的子模块的导出路径的装置;
用于根据记录的所述依赖包中各子模块的引用信息与所述导出路径,对所述初始源文件进行相关替换处理,以获得目标源文件,以用于打包处理的装置。
8.根据权利要求7所述的装置,其中,所述相关替换处理包括以下至少任一项:
-利用所述导出路径对所述初始源文件中关于所述依赖包的导入声明进行替换;
-利用记录的所述依赖包中各子模块的引用信息对所述初始源文件中关于所述依赖包中的子模块的引用信息进行替换。
9.根据权利要求7或8所述的设备,其中,确定所述各子模块中属于子模块导出的子模块的导出路径的装置用于:
-获取所述依赖包的各子模块的根目录;
-获取所述依赖包的各子模块的输出;
-根据所述根目录,并结合所述输出,确定所述各子模块的导出路径;
-根据所述各子模块的导出路径,确定所述各子模块中属于子模块导出的子模块,以得到属于子模块导出的子模块的导出路径。
10.根据权利要求7至9中任一项所述的设备,其中,确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息的装置用于:
对所述初始源文件进行静态语法分析,以确定所述初始源文件中的依赖包及该依赖包的至少一个引用信息。
11.根据权利要求7至10中任一项所述的设备,其中,所述初始源文件包括前端编译文件。
12.根据权利要求7至11中任一项所述的设备,其中,其中,若所述初始源文件中具有多个依赖包,其中,若满足所述至少一个引用信息均是对所述依赖包中的子模块的引用的触发条件,记录所述依赖包中各子模块的引用信息的装置还用于:
若满足多个所述依赖包中至少一个依赖包的至少一个引用信息均是对该依赖包中的子模块的引用的触发条件,记录该依赖包中各子模块的引用信息。
13.一种文件打包工具,其中,该文件打包工具包括如权利要求7至11中任一项所述的设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710026438.0A CN106874394B (zh) | 2017-01-13 | 2017-01-13 | 一种文件打包预处理的方法与设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710026438.0A CN106874394B (zh) | 2017-01-13 | 2017-01-13 | 一种文件打包预处理的方法与设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106874394A true CN106874394A (zh) | 2017-06-20 |
CN106874394B CN106874394B (zh) | 2020-12-29 |
Family
ID=59157378
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710026438.0A Active CN106874394B (zh) | 2017-01-13 | 2017-01-13 | 一种文件打包预处理的方法与设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106874394B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107665124A (zh) * | 2017-09-14 | 2018-02-06 | 广东神马搜索科技有限公司 | 模块化JavaScript文件处理方法、设备和服务器 |
CN111273943A (zh) * | 2018-12-04 | 2020-06-12 | 北京嘀嘀无限科技发展有限公司 | 应用文件的生成方法、装置及电子设备 |
CN111428209A (zh) * | 2019-01-10 | 2020-07-17 | 腾讯科技(深圳)有限公司 | 一种应用程序的混淆方法、装置及存储介质 |
CN111949312A (zh) * | 2020-08-14 | 2020-11-17 | 曙光信息产业(北京)有限公司 | 数据模块的打包方法、装置、计算机设备和存储介质 |
CN112394958A (zh) * | 2020-11-17 | 2021-02-23 | 全知科技(杭州)有限责任公司 | 一种轻量化升级的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110145693A1 (en) * | 2009-12-10 | 2011-06-16 | Fulcrum Medical Inc. | Transfer of digital medical images and data |
CN105068850A (zh) * | 2015-09-11 | 2015-11-18 | 厦门喜鱼网络科技有限公司 | 一种资源包加载装置、方法和计算设备 |
CN105094849A (zh) * | 2015-08-25 | 2015-11-25 | 百度在线网络技术(北京)有限公司 | 一种插件的资源调用方法和装置 |
CN105354049A (zh) * | 2015-09-29 | 2016-02-24 | 北京畅游天下网络技术有限公司 | 一种三维动画引擎的资源加载方法、装置及系统 |
CN106209925A (zh) * | 2015-04-29 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 页面加载方法、客户端及系统 |
-
2017
- 2017-01-13 CN CN201710026438.0A patent/CN106874394B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110145693A1 (en) * | 2009-12-10 | 2011-06-16 | Fulcrum Medical Inc. | Transfer of digital medical images and data |
CN106209925A (zh) * | 2015-04-29 | 2016-12-07 | 阿里巴巴集团控股有限公司 | 页面加载方法、客户端及系统 |
CN105094849A (zh) * | 2015-08-25 | 2015-11-25 | 百度在线网络技术(北京)有限公司 | 一种插件的资源调用方法和装置 |
CN105068850A (zh) * | 2015-09-11 | 2015-11-18 | 厦门喜鱼网络科技有限公司 | 一种资源包加载装置、方法和计算设备 |
CN105354049A (zh) * | 2015-09-29 | 2016-02-24 | 北京畅游天下网络技术有限公司 | 一种三维动画引擎的资源加载方法、装置及系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107665124A (zh) * | 2017-09-14 | 2018-02-06 | 广东神马搜索科技有限公司 | 模块化JavaScript文件处理方法、设备和服务器 |
CN107665124B (zh) * | 2017-09-14 | 2021-04-20 | 阿里巴巴(中国)有限公司 | 模块化JavaScript文件处理方法、设备和服务器 |
CN111273943A (zh) * | 2018-12-04 | 2020-06-12 | 北京嘀嘀无限科技发展有限公司 | 应用文件的生成方法、装置及电子设备 |
CN111428209A (zh) * | 2019-01-10 | 2020-07-17 | 腾讯科技(深圳)有限公司 | 一种应用程序的混淆方法、装置及存储介质 |
CN111428209B (zh) * | 2019-01-10 | 2023-09-19 | 腾讯科技(深圳)有限公司 | 一种应用程序的混淆方法、装置及存储介质 |
CN111949312A (zh) * | 2020-08-14 | 2020-11-17 | 曙光信息产业(北京)有限公司 | 数据模块的打包方法、装置、计算机设备和存储介质 |
CN111949312B (zh) * | 2020-08-14 | 2024-02-09 | 曙光信息产业(北京)有限公司 | 数据模块的打包方法、装置、计算机设备和存储介质 |
CN112394958A (zh) * | 2020-11-17 | 2021-02-23 | 全知科技(杭州)有限责任公司 | 一种轻量化升级的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106874394B (zh) | 2020-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106874394A (zh) | 一种文件打包预处理的方法与设备 | |
CN104391954A (zh) | 数据库日志的处理方法及装置 | |
WO2021164253A1 (zh) | 用户行为实时多维度分析方法、装置及存储介质 | |
CN104750727B (zh) | 一种列式内存存储查询装置及列式内存存储查询方法 | |
CN104881466A (zh) | 数据分片的处理以及垃圾文件的删除方法和装置 | |
CN106951254B (zh) | 支付系统中相似业务功能模块复用的方法及装置 | |
CN106201224A (zh) | 一种数据批量处理的方法及装置 | |
CN110975293A (zh) | 建立资源引用关系表的方法、装置、服务器及介质 | |
CN111177113A (zh) | 数据迁移方法、装置、计算机设备和存储介质 | |
CN107656933A (zh) | 一种语音播报方法及装置 | |
CN110222046B (zh) | 列表数据的处理方法、装置、服务器和存储介质 | |
WO2019018062A1 (en) | AUTOMATIC IMAGE ORGANIZATION IN IMAGE GRID LAYOUT | |
WO2018053889A1 (zh) | 分布式计算框架和分布式计算方法 | |
US10372299B2 (en) | Preserve input focus in virtualized dataset | |
CN111126619B (zh) | 一种机器学习方法与装置 | |
WO2018039048A1 (en) | Dynamically render large dataset in client application | |
US8479143B1 (en) | Signature based duplicate extraction | |
US9201937B2 (en) | Rapid provisioning of information for business analytics | |
US20130346845A1 (en) | Interactive multi device in memory form generation | |
CN104965737A (zh) | 更新数据的获取方法及装置 | |
Yin et al. | GOM-Hadoop: A distributed framework for efficient analytics on ordered datasets | |
CN114238391A (zh) | 数据分页查询方法、装置、电子设备及存储介质 | |
CN113516506B (zh) | 一种数据处理方法、装置及电子设备 | |
CN114385368A (zh) | 预写日志的刷写方法和装置 | |
US8495033B2 (en) | Data processing |
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 |