从事前端开发工作的大概都有所耳闻 requireJS 这个框架,以前都是使用而已没时间写一些记录,今天有空就写一下,顺便写个例子;
什么是 requireJS ?
requireJS 是用JavaScript编写的js框架,主要功能是可以按不同的先后依赖关系对 javascript 等文件的进行加载工作,可简单理解为JS文件的加载器,它非常适合在浏览器中使用,它可以确保所依赖的JS文件加载完成之后再加载当前的JS文件,这在大量使用JS文件的项目中可确保各个JS文件的先后加载顺序,确保避免了以前因某些原因某个文件加载慢而导致其它加载快的文件需要依赖其某些功能而出现某函数或某变量找不到的问题,这点非常有用,也是 requireJS 的主要价值所在吧;
requireJS 官网 http://requirejs.org 中文翻译网 http://www.requirejs.cn 更多详细的请到官网了解,一下是快速简要了解的知识点。
快速简要了解要点:
2, define(function(){...}); 从名字就可以看出这个api是用来定义一个模块;
3, require(['aModule','bModule'],function(a,b){...}) 加载依赖模块,并执行加载完后的回调函数;
4,在使用requirejs时,加载模块时 不用写.js后缀,当然也是不能写后缀;
5, require.config({...}) 是用来配置模块加载位置和设置基本路径等;
6,加载requirejs脚本的script标签加入了 data-main属性,这属性指定在加载完reuqire.js后,就用requireJS加载该属性值指定路径下的JS文件并运行,所以一般该JS文件称为主JS文件,类似C或Java语言中main函数的功能,然后把require.config的配置加该主文件后可使每一个页面都使用这个配置,然后页面中就可直接使用require来加载所有的短模块名即可,这样即可在一个地方配置所有地方使用,同时模块别名的使用和管理也都比较方便;例如: < script data-main="js/main" src="js/require.js">< /script>
7,当script标签指定data-main属性时,require会 默认的将data-main指定的js为根路径;
8,require加载的模块一般都需要符合AMD规范,即使用define来申明模块;
9, 加载非AMD规范的js,这时候就需要用到另一个功能: shim; 例如:
require.config({ paths:{ "underscore":"http://www.xxx.com/xpath/xFile.js" } ,shim: { "underscore" : { exports : "_"; } } });
好了,简要介绍就到这。
下面看一个实际例子
这个例子的设计要求是 workjs01.js 文件依赖 jQuery, workjs02.js 依赖 workjs01.js,只有等依赖文件加载完了,最后在页面打出提示信息,
1,首先看例子文件目录结构:
//------------------------------------------------- userExample01 |---- *.html //html页面 |----scripts | |---- *.js //main.js, require.js等 |----lib //各个第三方框架 | |----jquery | |---- *.js |----work //各个业务工作JS文件 |---- *.js //-------------------------------------------------
2,HTML 文件 index.html 注意看 requireJS 加载方式之一,见 script 标签,
2, 主文件 main.js 一般用这个进行主文件,进行各个文件按一定先后完成各个文件的加载;推荐注意文件个注释说明和书写格式,方便养成良好习惯和代码规范;
3,业务文件之一, workjs01.js 注意语法看看模块是怎么写的,推荐注意文件各个注释说明和书写格式,方便养成良好习惯和代码规范
4,业务文件之一, workjs02.js 推荐注意文件个注释说明和书写格式,方便养成良好习惯和代码规范;
注意, 对应的 requireJS 和 jquery 这里没有给出,到对应的网上或官网下载放到对应目录,注意修改文件名对应即可,参见对应地方的注释;
好了,例子介绍到这就完了,还算简单吧? 呵呵,我把这个例子完整打包上传到我的空间,欢迎点击这里下载,拍砖讨论...
值得注意的是本例虽然简单,但是基本包含了实际大部分 requireJS 知识点,注释也非常清楚,同时注意文件的组织结构,requireJS的配置的定义,调用关系,模块的写法,模块内部的写法,依赖文件的加载和调用,以及模块如何自动运行某个函数等等。可能部分有疏漏,,拍砖讨论...