首页 > 代码库 > requirejs的使用
requirejs的使用
requirejs是amd规范的推广,学习有助了解amd和cmd以及commonjs之间的联系和区别。
一、require可以避免js的阻塞,导致页面其他解构刷不出来,或者刷的很慢。
其中典型的例子,就是alert方法,先弹出弹窗,点击确定之前,页面是一片空白,确定之后才显示文字。解决方法一种:我们可以把js放在html的末尾;另一种:
<script src="http://www.mamicode.com/js/require.js" defer async="true" ></script>
defer是兼容ie,async是现代浏览器所支持的。
二、加载我们的模块data-main
<script src="http://www.mamicode.com/js/require.js" data-main="js/main"></script>
三、主模块的写法
// main.js require([‘moduleA‘, ‘moduleB‘, ‘moduleC‘], function (moduleA, moduleB, moduleC){ // some code here });
require接受两个参数:
第一个参数: 字符串的数组,表示依赖模块;
第二个参数:回调函数,里面参数,所依赖模块的对象,如jquery对象,所使用的$。另外只有当某块加载完成,回调才执行,这句很重要,怎么理解。
我做了一个例子(源代码下载),看下一面一段代码:
green这个模块是用到jq一个方法,green这模块文件大小只有200b,觉得远远小于jquery的文件大小,通常情况green先加载完,在然后加载完jquery。但在没加载完jquery之前,green用的jq是会报错的,如下图:
即使这样,也这不影响代green的toGreen的执行。这是因为jquery等模块加载完了,才会执toGreen。
四、模块的写法
第1种:
require.config({ paths: { "jquery": "lib/jquery.min", "underscore": "lib/underscore.min", "backbone": "lib/backbone.min" } });
第2种:
require.config({ baseUrl: "js/lib", paths: { "jquery": "jquery.min", "underscore": "underscore.min", "backbone": "backbone.min" } });
第3种:
require.config({ paths: { "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min" } });
五、amd模块的写法
define([‘myLib‘], function(myLib){ function foo(){ myLib.doSomething(); } return { foo : foo }; });
当 require()函数加载上面这个模块的时候,就会先加载 myLib.js 文件。
六、加载非规范模块
require.config({ shim: { ‘jquery.scroll‘: { deps: [‘jquery‘], exports: ‘jQuery.fn.scroll‘ } } }
deps 指的是依赖的模块
exports 表明这个模块外部调用时的名称,说白点就是指这插件文件名字
总结:requirejs不经加载js文件,还可以加载json、txt、image,详细的内容可以看官网或者github
requirejs的使用