首页 > 代码库 > 初步认识了解require与AMD模式

初步认识了解require与AMD模式

require可以被理解为一个工具库,主要作用于把客户端代码分割为各模块从而实现了模块化管理,便于代码的编写与维护;其次实现了异步或动态加载解决了网页加载阻塞

它的模块管理遵循AMD规范(Asynchronous Module Definition - 异步加载模块规范);所谓AMD规范,就是为了解决模块化编程带来的代码加载先后顺序问题,以及常规为解决该阻塞问题方式带来的各种附加问题

 

核心是通过define方法将无序混乱代码分割为有序的模块,通过require方法实现代码的模块加载

需要载入的文件:require

 

载入require实现模块化编程

<script src="js/require.min.js" data-main="js/demo/main"></script>

这样就可以开始了:js文件夹下存放着require文件和demo文件夹,demo文件夹下存放着main文件;data-main属性指定的文件main.js存放着程序主代码

页面会自己加载main.js,注意该加载为异步加载且不会引起阻塞

 

定义模块的define方法

独立模块

define({    create : function (){},    update : function (){},    read : function (){},    delete : function (){}});

这是一个定义了拥有CURD4个方法的独立新模块,还可以这样写

define(function (){    return{        create : function (){},        update : function (){},        read : function (){},        delete : function (){}    };});

第二种方法更自由,还可以初始化一些代码;对象变成了函数,函数的返回值即模块

 

非独立模块

define([‘image‘, ‘text‘], function (img, txt){    return{        get : function (){            img.geturl();            txt.getext();        }    };});

参数以数组形式定义了一个依赖image模块和text模块的新模块,image和text分别代表同样被定义为模块的image.js文件和text.js文件,回调中的参数则分别对应加载的模块

新模块中get方法调用了image模块的geturl方法和text模块的getext方法

define(function (require){    var img = require(‘image‘);    var txt = require(‘text‘);    return{        get : function (){            img.geturl();            txt.getext();        }    };});

好处是导入模块过多的时候,视觉上不会蛋疼

 

加载模块的require方法

异步加载

require([‘image‘, ‘text‘], function (img, txt){    return true;});

书写格式和define一样

 

动态加载

define(function (require){    var status = false;    require([‘image‘, ‘text‘], function (img, txt){        status = true;    });    return status;});

这是一个新的独立模块,定义模块的define方法内部动态加载了2个模块,加载完成后设置了一个状态值并返回

define([‘html‘], function (html){    var hm = new html();    require([‘image‘, ‘text‘], function (img, txt){        hm.set({            img : img,            txt : txt        });    };    return hm.send();});

这是一个新的非独立模块,加载了一个依赖模块html,定义模块的define方法内部动态加载了2个模块,加载完成后改变html模块的set对象并返回html模块的send对象

 

第三参数

require([‘image‘, ‘text‘], function (img, txt){    return true;}, function (err){    return false;});

回调用于处理错误,参数为接受到的error对象

 

配置require的config方法

paths

require.config({    paths : {        jquery : ‘public/jquery‘    }});

paths参数指定各模块位置

require([‘jquery‘], function ($){    return true;});

加载已配置了路径的jquery模块

 

shim

require.config({    paths : {        ‘underscore‘ : ‘public/underscore‘,        ‘backbone‘ : ‘public/backbone‘    },    shim : {        ‘underscore‘: {            exports : ‘_‘        },        ‘backbone‘: {            deps : [‘underscore‘],            exports : ‘Backbone‘        }    }});

有些库AMD模式不兼容,需要指定shim属性的值来帮助require加载非AMD规范库
underscore、backbone就是非AMD规范库,shim指定它们依赖关系及输出符_、Backbone

 

AMD模式

定义模块的define方法和调用模块的require方法,合称为AMD模式

该模式的定义模块方法清晰且不会污染全局环境,能够清楚的显示依赖关系;允许异步加载模块,也可以根据需要动态加载模块

 

我们的学习完成了,但是还是很迷糊;先这样了不经实战也是无法继续深入了

初步认识了解require与AMD模式