专利名称:一种项目开发中数据包的加载方法及系统的制作方法
技术领域:
本申请涉及计算机技术,特别是涉及一种项目开发中数据包的加载方法及系统。
背景技术:
JavaScript是一种基于对象和事件驱动并具有相对安全性的客户端脚本语言。JavaScript被广泛用于客户端Web开发,常用来给HTML网页添加动态功能,比如响应用户的各种操作。在基于JavaScript语言的项目开发中,需要调用外部文件的数据包,但是JavaScript语言在设计之初存在一个缺陷,就是在引入外部文件的数据包时需要通过在html文档中手写标签的形式载入。然后通过写回调函数的形式来控制执行顺序,以使各个JavaScript文件的数据包可以按照一定的顺序和逻辑执行。目前有一些JavaScript库就实现了各自的“包管理”机制,比如YUILoader和Yepnope等,这些方法中开发人员使用一个类或方法的前提是,必须预先了解所述类或方法是在哪个数据包中实现的。因此在项目开发的程序编写中,编写类和方法的函数之前,需要先手动编写代码,将所述类和方法的函数对应的数据包从某个目录下加载到项目中。此时就要求开发人员需要预先知道类或方法的函数名与数据包的对应关系,所述对应关系是函数名对应数据包的存储位置,此配置过程使得项目开发的时间大大增加,并且影响了项目开发的效率。并且数据库将常会维护和升级,此时就可能导致数据包存储目录的变更,如果开发人员不知道新的存储目录,而仍然使用旧的存储目录加载数据包,就会导致程序运行错误。
发明内容
本申请提供了一种项目开发中数据包的加载方法及系统,以解决人工加载数据包影响项目开发时间和效率的问题。为了解决上述问题,本申请公开了一种项目开发中数据包的加载方法,包括:载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名;根据种子文件对程序主逻辑进行预解析;根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中。相应的,本申请还公开了一种项目开发中数据包的加载系统,包括:载入模块,用于载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名;预解析模块,用于根据种子文件对程序主逻辑进行预解析;第一加载数据包模块,用于根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中。与现有技术相比,本申请包括以下优点:本申请提供了一种项目开发中数据包的加载方法及系统,在程序配置完成后,载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名。根据种子文件对程序主逻辑进行预解析,根据所述配置文件,自动查找并加载与程序中各个函数具有映射关系的数据包。可以自动加载所需的数据包,无需人工配置加载数据包,减少了项目开发的时间,提高了项目开发的效率。并且配置文件中配置了唯一的函数名对应唯一的数据包,不需按照存储目录来加载,因此即使数据库因维护、升级而导致数据包的存储目录发生变更,也不会影响数据包的加载,保证了程序的正确运行。其次,数据包之间在项目实现中还可能存在固有的依赖关系,若没有将具有依赖关系的数据包都加载到项目中,也可能导致程序运行的失败。因此本申请在种子文件中配置了数据包之间在项目实现中的依赖关系,可以将已加载数据包所以来的其他数据包都加载到项目中,省去了现有技术中人工查找数据包之间依赖关系的繁琐过程,更进一步的节省项目开发的时间,保证了程序的正确运行。
图1是本申请实施例所述一种项目开发中数据包的加载方法流程图;图2是本申请优选实施例所述一种项目开发中程序主逻辑数据包的加载方法流程图;图3是本申请优选实施例所述一种项目开发中数据包中程序主逻辑的数据包加载方法流程图;图4是本申请实施例所述一种项目开发中数据包的加载系统结构图。
具体实施例方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本申请作进一步详细的说明。现有技术中,在项目开发的编写程序函数之前,需要先手动编写代码,将所述函数对应的数据包从某个目录下加载到项目中。此时就要求开发人员需要预先知道类或方法的函数名与数据包的对应关系,并且知道数据包的存储位置,此配置过程使得项目开发的时间大大增加,并且影响了项目开发的效率。并且数据库将常会维护和升级,此时就可能导致数据包存储目录的变更,如果开发人员不知道新的存储目录,而仍然使用旧的存储目录加载数据包,就会导致程序运行错误。本申请提供一种项目开发中数据包的加载方法,可以自动加载所需的数据包,无需人工配置加载数据包,减少了项目开发的时间,提高了项目开发的效率。并且配置文件中配置了唯一的函数名对应唯一的数据包,不需按照存储目录来加载,因此即使数据库因维护、升级而导致数据包的存储目录发生变更,也不会影响数据包的加载,保证了程序的正确运行。参照图1,其给出了本申请实施例所述一种项目开发中数据包的加载方法流程图。
步骤11,载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名;在开发项目配置程序代码时,会预先配置种子文件和配置文件的语句,因此在程序都配置完成后,会先载入种子文件和配置文件。其中,种子文件中提供了程序预解析的功能。所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名。步骤12,根据种子文件对程序主逻辑进行预解析;根据种子文件中程序预解析的功能,对项目程序的主逻辑进行预解析,所述预解析待执行的代码,就是模拟运行待执行的代码。所述预解析是通过一个复杂的正则表达式进行函数的源码匹配来实现的,这种实现方法代码简洁、执行效率高,基本不会因为预解析对程序性能造成影响。步骤13,根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中。种子文件提供了程序预解析的功能,因此会模拟运行待执行的代码,模拟运行中会运行到某个函数,然后根据配置文件中函数与数据包的映射关系,自动查找与该函数唯一对应的数据包,将所述数据包加载到项目中,在正式运行程序时,就可以使用该函数执行相应的功能了。因为配置文件中的映射关系是将函数名与数据包名相对应,一个函数名唯一对应一个数据包名,因此通过某函数的函数名可以对应数据包名,进而就可以找到对应的数据包。此种方法不需要按照数据包的存储目录来加载数据包,因而即使数据包的存储目录发生改变,也不会影响到数据包的加载。综上所述,本申请所述的方法在程序配置完成后,载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名。根据种子文件对程序主逻辑进行预解析,根据所述配置文件,自动查找并加载与程序中各个函数唯一对应的数据包。可以自动加载所需的数据包,无需人工配置加载数据包,减少了项目开发的时间,提高了项目开发的效率。并且配置文件中配置了函数与数据包的映射关系,唯一的函数对应唯一的数据包,不需按照存储目录来加载,因此即使数据库因维护、升级而导致数据包的存储目录发生变更,也不会影响数据包的加载,保证了程序的正确运行。本申请提供了 Autoload即自动加载数据包的功能,针对函数的数据包存储路径变更的情况,仍然可以自动加载到该数据包。优选的,步骤12,所述根据种子文件对程序主逻辑进行预解析之后,还包括:扫描程序主逻辑中的各个模块,查找所述模块中的函数。步骤12中对程序主逻辑进行预解析,及模拟运行待执行的代码,因此接下来会扫描程序主逻辑中的各个模块,查找各个模块中的函数。优选的,步骤13根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中,包括:步骤131,针对程序主逻辑中某一模块的函数,根据配置文件中该函数名唯一对应的数据包名,查找该数据包并将所述数据包加载到项目中;上述步骤中查找到程序主逻辑中各个模块的函数后,针对程序主逻辑中某一模块的函数,可以根据配置文件中函数和数据包的对应关系,查找到该函数名唯一对应的数据包名,进而在系统中搜索该数据包,查找到以后,可以将该数据包加载到项目中。步骤132,继续加载程序主逻辑中其他模块的函数对应的数据包,直至程序主逻辑中所有模块的函数对应的数据包都加载完毕。然后继续查找程序主逻辑中其他模块的函数,根据配置文件对应的数据包中函数和数据包的对应关系,查找到该函数名唯一对应的数据包名,进而在系统中搜索到该数据包并加载到项目中,直至所有数据包加载完毕。例如,某一项目中包含5个模块,首先扫描模块1,模块I中包含4个函数,按照先后顺序依次加载这4个函数对应的数据包后,可以继续扫描其他4个模块,加载这4个模块中各个函数对应的数据包,直至所有5个模块中函数对应的数据包都加载完毕即可。具体实施中,本申请的一种实现方式叫做Sandbox (安全沙箱),Sandbox提供了对全局函数_31^010&(1()的支持(以两个下划线为前缀),这个函数可以返回一个映射表,在这个映射表中给出了类或方法的函数名和数据包名的映射关系,一个函数名唯一对应一个数据包名。通过定义_3机010&(1()全局函数,可以针对所有可能用到的类或方法的函数,配置和函数对应的数据包。所述的配置文件就是在其中配置好T_aut0l0ad()全局函数中函数名和数据包名的唯一对应关系。例如,一种编程实现方式为:
function —autoload(){ return {
'MyClass I': 'MyClass l.js', 'A.B.C.D'i'MyClassl.js',
'MyClass2': 'MyClass2.j s',
’X.Y.Z':'MyClass2.js’
};
}优选的,所述种子文件中配置了数据包之间在项目框架实现中的依赖关系,所述的方法还包括:根据所述种子文件,自动查找已加载数据包所依赖的数据包,并将所述数据包加载到项目中,直至所有数据包加载完毕。种子文件中还配置了数据包之间在项目框架实现中的依赖关系,即在项目框架实现中,例如,项目框架中包含5个模块,模块I包含4个数据包,模块2中包含6个数据包。而在项目实现时模块I和模块2之间具有关联,为实现此关联就需要数据包X,而模块I的数据包2需要依赖数据包y,才能在项目中实现它的相应功能。因此针对已经根据配置文件加载的数据包,即已加载数据包,可以根据种子文件中的配置,自动查找该数据包所依赖的数据包,并将所述数据包加载到项目中,直至所有数据包加载完毕。例如,种子文件中配置:数据包I依赖数据包2,数据包2依赖数据包3 ;根据配置文件中配置:程序中的函数X对应数据包I。预解析程序主逻辑时,模拟运行到函数X,此时会自动查找并将数据包I加入到项目中。然后根据种子文件,其中配置了数据包I依赖数据包2,自动查找并将数据包2加入到项目中。继续判断是否有未加载的数据包,此时种子文件中配置了数据包2依赖数据包3,就可以自动查找并将数据包3加入到项目中。再判断是否有未加载的数据包,此时所有数据包都加载完毕了。针对Sandbox这种实现方式,Sandbox实现了 “动态构建模块树”的功能来实现数据包的加载。也就是说,基于Sandbox编写项目程序代码时,不需要预先在程序代码中定义好数据包的依赖关系。因为已经在Sandbox的种子文件中预先配置了数据包之间的依赖关系,因此若已加载的数据包依赖了其他的数据包,Sandbox会自动去加载它所依赖的数据包。具体实现时,每个包的主逻辑代码可以都闭包在一个函数中,如下列的编程实现方式:
Sandbox.add(function(S) {
//这个数据包的主逻辑。
},{
requires: ['a.js'] //这个数据包 依赖的另外一个数据包。
};所述“动态构建模块树”的功能就是不会立即执行数据包的逻辑,而是先将逻辑保存到一个栈内,然后加载对应的数据包,等所有依赖的数据包文件都加载完成后,再根据依赖关系顺次执行每个包的逻辑。此时可以保证程序执行时的逻辑顺序不出现问题,先执行所依赖数据包中的逻辑,再执行主逻辑。优选的,所述直至所有数据包加载完毕之后,还包括:根据种子文件对已加载数据包中程序的主逻辑进行预解析;上述步骤中将程序主逻辑对应的所有数据包都加载完毕后,为了实现数据包中程序的功能,可以根据种子文件中程序预解析的功能,对已经加载的数据包的程序进行预解析,模拟运行待执行的代码。根据所述配置文件,自动查找与数据包程序中函数唯一对应的数据包,并将所述数据包加载项目中。根据配置文件中函数与数据包的映射关系,一个函数名唯一对应一个数据包名,因此通过某函数的函数名可以对应数据包名,可以自动查找与该函数唯一对应的数据包,然后将所述数据包加载到项目中。此种方法不需要按照数据包的存储目录来加载数据包,因而即使数据包的存储目录发生改变,也不会影响到数据包的加载。根据配置文件将程序中函数对应的数据包都加载完毕后,还可以根据种子文件中配置的数据包之间的依赖关系,查找已加载数据包所依赖的其他数据包,直至所有数据包加载完毕。现有技术中的“包管理”机制只实现了传统的数据包载入,即先手动引入数据包,再使用这个数据包中定义的类或函数。本申请将可以手动引入数据包这一步操作省略掉,在编写程序时直接调用“未知的”类或方法,对程序的预解析中可以自动加载“未知的”类或方法的数据包。举例来说,现有技术的YUILoader方法中,当页面引入了库文件之后,要调用方法Y.Node.getDOMNode (),需要编写如下的程序:
YUI().use('node',function(Y) {
//Y.Node.getDOMNode方法的定义在模块node中,因此要先引用node //即 use('node'),类似 import 'node'
Y.Node.getDOMNode();//然后调用这个方法
});由上述可知,此处是手动载入了 node`,而本申请进一步简化了这步操作,若基于Sandbox来写代码,页面引入了库文件后,编写如下的程序即可:
Sandbox.ready(function(S) {
//直接调用这个“未知’’方法,不用手动载入`实现这个方法的包或外部
文件
Y.Node.getDOMNodeQ;
});参照图2,其给出了本申请优选实施例所述一种项目开发中程序主逻辑数据包的加载方法流程图。步骤201,编写程序代码时,首先编写载入种子文件和配置文件的语句;步骤202,继续编写程序主逻辑中的相关函数和其他代码;步骤203,载入种子文件对程序主逻辑进行预解析;步骤204,载入程序主逻辑各个函数对应的数据包;步骤205,判断是否有未载入的数据包;此时可以依据种子文件中数据包之间的依赖关系,将已加载数据包依赖的其他数据包都加载项目中。若是,则执行步骤206,若否,则执行步骤207。步骤206,加载该数据包;步骤207,程序主逻辑的数据包加载完毕。可以预解析已加载的数据包中程序的主逻辑,即图3的过程,图3过程执行完毕后,后续可以执行程序主逻辑。参照图3,其给出了本申请优选实施例所述一种项目开发中数据包中程序主逻辑的数据包加载方法流程图。步骤301,针对已加载的数据包,预解析数据包中程序的主逻辑;步骤302,加载主逻辑中函数对应的数据包;步骤303,判断是否有未载入的数据包;此时可以依据种子文件中数据包之间的依赖关系,将已加载数据包依赖的其他数据包都加载项目中。若存在,则执行步骤304,若不存在,则执行步骤305。步骤304,加载该数据包;步骤305,数据包程序主逻辑的数据包加载完毕。后续可以执行数据包程序的主逻辑。数据包之间在项目实现中还可能存在固有的依赖关系,若没有将具有依赖关系的数据包都加载到项目中,也可能导致程序运行的失败。因此本申请在种子文件中配置了数据包之间在项目实现中的依赖关系,可以将已加载数据包所以来的其他数据包都加载到项目中,省去了现有技术中人工查找数据包之间依赖关系的繁琐过程,更进一步的节省项目开发的时间,保证了程序的正确运行。本申请以JavaScript为基础,在客户端浏览器中创新性的实现了 autoload机制,运行环境可以是在客户端浏览器中,兼容IE6-1E9,Firefox3.0+, Chrome5+、Safari4+和0pera9+等主流浏览器。参照图4,其给出了本申请实施例所述一种项目开发中数据包的加载系统结构图。相应的,本申请还提供了一种项目开发中数据包的加载系统,包括:载入模块11、预解析模块12和第一加载数据包模块14,其中,载入模块11,用于载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名;预解析模块12,用于根据种子文件对程序主逻辑进行预解析;第一加载数据包模块14,用于根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中。优选的,所述的系统还包括:扫描并查找模块13,用于扫描程序主逻辑中的各个模块,查找所述模块中的函数。优选的,第一加载数据包模块14,包括:第一加载子模块141,用于针对程序主逻辑中某一模块的函数,根据配置文件中该函数名唯一对应的数据包名,查找该数据包并将所述数据包加载到项目中;第二加载子模块142,用于继续加载程序主逻辑中其他模块的函数对应的数据包,直至程序主逻辑中所有模块的函数对应的数据包都加载完毕。优选的,所述的系统还包括:第二加载数据包模块15,用于根据所述种子文件,自动查找已加载数据包所依赖的数据包,并将所述数据包加载到项目中,直至所有数据包加载完毕。预解析数据包模块16,用于根据所述种子文件对已加载数据包中程序的主逻辑进行预解析。
第三加载数据包模块17,用于根据所述配置文件,自动查找与数据包程序中函数唯一对应的数据包,并将所述数据包加载项目中。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或
者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,
并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。以上对本申请所提供的一种项目开发中数据包的加载方法及系统,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
权利要求
1.一种项目开发中数据包的加载方法,其特征在于,包括: 载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名; 根据种子文件对程序主逻辑进行预解析; 根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中。
2.根据权利要求1所述的方法,其特征在于,所述根据种子文件对程序主逻辑进行预解析之后,还包括: 扫描程序主逻辑中的各个模块,查找所述模块中的函数。
3.根据权利要求2所述的方法,其特征在于,根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中,包括: 针对程序主逻辑中某一模块的函数,根据配置文件中该函数名唯一对应的数据包名,查找该数据包并将所述数据包加载到项目中; 继续加载程序主逻辑中其他模块的函数对应的数据包,直至程序主逻辑中所有模块的函数对应的数据包都加载完毕。
4.根据权利要求1所述的方法,其特征在于,所述种子文件中还配置了数据包之间在项目框架实现中的依赖关系,所述的方法还包括: 根据所述种子文件,自动查找已加载数据包所依赖的数据包,并将所述数据包加载到项目中,直至所有数据包加载完毕。
5.根据权利要求4所述的方法,其特征在于,所述直至所有数据包加载完毕之后,还包括: 根据种子文件对已加载数据包中程序的主逻辑进行预解析; 根据所述配置文件,自动查找与数据包程序中函数唯一对应的数据包,并将所述数据包加载项目中。
6.一种项目开发中数据包的加载系统,其特征在于,包括: 载入模块,用于载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名; 预解析模块,用于根据种子文件对程序主逻辑进行预解析; 第一加载数据包模块,用于根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中。
7.根据权利要求6所述的系统,其特征在于,还包括: 扫描并查找模块,用于扫描程序主逻辑中的各个模块,查找所述模块中的函数。
8.根据权利要求7所述的系统,其特征在于,所述第一加载数据包模块,包括: 第一加载子模块,用于针对程序主逻辑中某一模块的函数,根据配置文件中该函数名唯一对应的数据包名,查找该数据包并将所述数据包加载到项目中; 第二加载子模块,用于继续加载程序主逻辑中其他模块的函数对应的数据包,直至程序主逻辑中所有模块的函数对应的数据包都加载完毕。
9.根据权利要求6所述的系统,其特征在于,还包括:第二加载数据包模块,用于根据所述种子文件,自动查找已加载数据包所依赖的数据包,并将所述数据包加载到项目中,直至所有数据包加载完毕。
10.根据权利要求9所述的系统,其特征在于,还包括: 预解析数据包模块,用于根据所述种子文件对已加载数据包中程序的主逻辑进行预解析。
第三加载数据包模块,用于根据所述配置文件,自动查找与数据包程序中函数唯一对应的数据包,并将所述数据 包加载项目中。
全文摘要
本发明提供了一种项目开发中数据包的加载方法及系统,以解决人工加载数据包影响项目开发时间和效率的问题。所述的方法包括载入种子文件和配置文件,其中,所述种子文件提供了程序预解析的功能,所述项目配置文件中配置了函数与数据包的映射关系,一个函数名唯一对应一个数据包名;根据种子文件对程序主逻辑进行预解析;根据所述配置文件,自动查找与程序中各个函数唯一对应的数据包,并将所述数据包加载到项目中。可以自动加载所需的数据包,无需人工配置加载数据包,减少了项目开发的时间,提高了项目开发的效率。
文档编号G06F9/445GK103207787SQ201210009029
公开日2013年7月17日 申请日期2012年1月12日 优先权日2012年1月12日
发明者李晶 申请人:阿里巴巴集团控股有限公司