JavaScript 模块化编程(笔记)(2)

第三章 JavaScript模块化编程(三):require.js的用法
一 为什么使用require.js
// 需要依次加载多个js文件;
// 缺点:
// 1.加载的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长;
// 2.由于js文件之间存在依赖关系,因此必须严格保证加载顺序,当依赖关系很复杂的时候,代码的编写和维护都会变得困难;
// 所以require.js解决了这两个问题:
// 1.实现js文件的异步加载,避免网页失去响应;
// 2.管理模块之间的依赖性,便于代码的编写和维护;

二 require.js的加载
1.加载require.js
    <script scr="https://www.jb51.net/js/require.js" defer async="true"></script>
// async属性表明这个文件需要异步加载,避免网页失去响应;IE不支持这个属性,只支持defer,所以把defer也写上;
2.加载main.js
    <script src="https://www.jb51.net/js/require.js" data-main="js/main"></script>
// data-main属性的作用是,指定网页程序的主模块=>main.js,这个文件会第一个被require.js加载;
// 由于require.js默认的文件后缀名是js,所以可以把main.js简写成main;

三 主模块main.js的写法
1.如果main.js不依赖任何其他模块,可以直接写入JavaScript代码;
// main.js
    alert('加载成功!');
2.如果main.js依赖于模块,这时就要使用AMD规范定义的require()函数;
// main.js
    require(['moduleA','moduleB','moduleC'],function(moduleA,moduleB,moduleC){
        // ...
    })
// require()函数接收两个参数:
// 参数一:数组,表示所依赖的模块,即主模块依赖的三个模块;
// 参数二:回调函数,当前面指定的模块都加载成功后,它将被调用;加载的模块会以参数形式传入该函数,从而在回调函数内部可以使用这些模块;
// require()异步加载模块,浏览器不会失去响应;它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题;
实例:
    require(['jquery','underscore','backbone'],function($,_,Backbone){
        // ...
    });

四 模块的加载
// 使用require.config()方法,可以对模块的加载行为进行自定义;
// require.config()就写在主模块(main.js)的头部;
// 参数就是一个对象,这个对象的paths属性指定各个模块的加载路径;
// 设定以下三个模块的文件默认和main.js在用一个目录;
    require.config({
        paths:{
            "jquery":"jquery.min",
            "underscore":"underscore.min",
            "backbone":"backbone.min"
        }
    });

// 如果加载的模块和主模块不在同一个目录,就要逐一指定路径;
    require.config({
        paths:{
            "jquery":"lib/jquery.min",
            "underscore":"lib/underscore.min",
            "backbone":"lib/backbone.min"
        }
    });
// 或者直接改变基目录(baseUrl)
    require.config({
        baseUrl:"js/lib",
        paths:{
            "jquery":"jquery.min",
            "underscore":"underscore.min",
            "backbone":"backbone.min"
        }
    });

// 如果模块在另一台主机上,也可以直接指定它的网址
    require.config({
        paths:{
            "jquery":"https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"
        }
    });
// require.js要求,每个模块是一个单独的js文件;这样的话,如果加载多个模块,就会发出多次HTTP请求,会影响网页的加载速度;
// 因此,require.js提供了一个优化工具,当模块部署完毕以后,可以用这个工具将多个模块合并在一个文件中,减少HTTP请求数;

五 AMD模块的写法

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

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