Require.js的基本用法详解(2)

require.js会先加载jQuery,然后再运行回调函数。main.js的代码就写在回调函数中。注意:require中的依赖是一个数组,即使只有一个依赖,你也必须使用数组来定义。

五:加载文件

在上一部分中,main.js的依赖模块是['jquery']。默认情况下,require.js会假定这个模块与main.js在同一个目录,文件名是 jquery.js,然后自动加载,除此之外,我们可以通过require.config()方法,我们可以对模块的加载行为进行自定义,require.config()就写在main.js的头部,它的参数是一个对象,这个对象的paths属性指定各个模块的加载路径。

require.config({     paths: {       "jquery": "jquery.min",       "anjular": "anjular.min"     }   });

上述模块路径默认与main.js在同一个目录(js子目录)。如果这些模块在其他目录,比如js/lib目录,则有两种写法。一种是逐一指定路径:

require.config({     paths: {       "jquery": "lib/jquery.min",       "anjular": "lib/anjular.min"     }   });

另一种则是直接改变根目录(baseUrl):

require.config({     baseUrl: "js/lib",     paths: {       "jquery": "jquery.min",       "anjular": "anjular.min"     }   });

之前的例子中加载模块都是本地js,但是大部分情况下网页需要加载的JS可能来自本地服务器、其他网站或CDN,这样就不能通过这种方式来加载了,我们以加载一个jquery库为例:

require.config({ paths : { "jquery" : ["http://libs.baidu.com/jquery/2.0.3/jquery"] } })

上面的例子中重复出现了require.config配置,如果每个页面中都加入配置,必然会十分麻烦,requirejs提供了一种叫"主数据"的功能,我们可以将所有的require.config配置放到main.js中,在页面中调用它,

<script data-main="js/main" src="https://www.jb51.net/js/require.js"></script>

就可以使每一个页面都使用这个配置,然后页面中就可以直接使用require来加载所有的短模块名。

六:AMD模块的写法

require.js加载的模块,采用AMD规范,也就是说,模块必须按照AMD的规定来写。具体来说,就是模块必须采用特定的define()函数来定义。如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。假定现在有一个math.js文件,它定义了一个math模块。那么,math.js就要这样写:

define(function (){     var add = function (x,y){       return x+y;     };     return {       add: add     };   });

然后在页面中:

require(['math'], function (math){   alert(math.add(1,1)); });

如果这个js文件还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。

define(['jquery'], function($){ $("#div1").css("background-color","red"); })  

当require()函数加载上面这个模块的时候,就会先加载jquery.js文件。

七:第三方模块

通过require加载的模块一般都需要符合AMD规范即使用define来申明模块,但是部分时候需要加载非AMD规范的js,这时候就需要用到另一个功能:shim:

1. 非AMD模块输出,将非标准的AMD模块变成可用的模块,例如:在老版本的jquery中,是没有继承AMD规范的,所以不能直接require["jquery"],这时候就需要shim

require.config({ shim: { "jquery" : {exports : "$"} } })

这样配置后,我们就可以在其他模块中引用jquery模块:

require(["jquery"], function(_){ $("#div1").css("background-color","red"); })

2.插件形式的非AMD模块,我们经常会用到jquery插件,而且这些插件基本都不符合AMD规范,比如jquery.form插件,这时候就需要将form插件加入到jquery中:

require.config({ shim: { "jquery.form" : { deps : ["jquery"] } } }) require.config(["jquery", "jquery.form"], function($){ $(function(){ $("#form").ajaxSubmit({...}); }) })

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfddd.html