AMD_CMD_RequireJS_模块化

1. 为什么要使用模块化?

1.解决命名冲突
2.解决文件依赖问题
3.模块的版本管理。通过别名等配置,配合构建工具,可以比较轻松地实现模块的版本管理。
4.提高可维护性。模块化可以让每个文件的职责单一,非常有利于代码的维护。
5.前端性能优化。通过异步加载模块,这对页面性能非常有益。
6.跨环境共享模块。CMD 模块定义规范与 Node.js 的模块规范非常相近。可以很方便实现模块的跨服务器和浏览器共享。
7.提高代码可读性,代码解耦,提高复用性
参考:玉伯也射雕github

2. CMD、AMD、CommonJS 规范分别指什么?有哪些应用

CommonJS
1.Node应用由模块组成,采用CommonJS模块规范。
根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见

2.CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性,加载模块使用require 方法,该方法读取一个文件并执行,如果请求的模块不能返回,那么 require 必须抛出一个错误。

3.CommonJS模块的特点如下:
所有代码都运行在模块作用域,不会污染全局作用域。
模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
模块加载的顺序,按照其在代码中出现的顺序

js标准教程

/*
模块定义model.js
*/ 

function printName(){
    console.log('a');
}
function sayHello(){
    console.log("hello" );
}
module.exports = {
    printName: printName,
    sayHello: sayHello
}
/*
加载模块
*/
var nameModule = require("./model.js")
nameModule.printName() //"a"
nameModule.sayHello() //"hello"

AMD
1.define和require这两个定义模块、调用模块的方法,合称为AMD模式。它的模块定义的方法非常清晰,不会污染全局环境,能够清楚地显示依赖关系,主要用于浏览器端。

2.AMD模式可以用于浏览器环境,并且允许非同步加载模块,也可以根据需要动态加载模块

3.requireJS主要解决两个问题:
a. 多个js文件可能有依赖关系,被依赖的文件需要早于依赖它的文件加载到浏览器
b. js加载的时候浏览器会停止页面渲染,加载文件越多,页面失去响应时间越长

4.语法:
define(id?, dependencies?, factory);
require([dependencies], function(){});

//定义模块 myModule.js
define(['dependency'],function(){
    //定义方法,并return 出去
    var name = 'xx'
    function PrintName(){
        console.log(name);
    }
    return {
        PrintName:PrintName
    }
})
//加载模块
require(['mod'],function(my){
    my.PrintName();
})

/*
define(id?, dependencies?, factory);

A. id: 定义中模块的名字,可选;如果没有提供该参数,模块的名字应该默认为模块加载器请求的指定脚本的名字。。
B. 依赖dependencies:是一个当前模块依赖的,已被模块定义的模块标识的数组字面量。 定的参数个数调用工厂方法。
C. 工厂方法factory,模块初始化要执行的函数或对象。如果为函数,它应该只被执行一次。如果是对象,此对象应该为模块的输出值。

require([dependencies], function(){});

A. 第一个参数是一个数组,表示所依赖的模块
B. 第二个参数是一个回调函数,当前面指定的模块都加载成功后,它将被调用。加载的模块会以参数形式传入该函数,从而在回调函数内部就可以使用这些模块
require()函数在加载依赖的函数的时候是异步加载的,这样浏览器不会失去响应,它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。
*/

CMD
CMD(Common Module Definition)是 SeaJS推广过程中产生的。在 CMD 规范中,一个模块就是一个文件。
define(id?, deps?, factory)
A. 一个文件一个模块,所以经常就用文件名作为模块id
B. CMD推崇依赖就近,所以一般不在define的参数中写依赖,在factory中写
factory有三个参数 function(require, exports, module)
require 是 factory 函数的第一个参数,require 是一个方法,接受 模块标识 作为唯一参数,用来获取其他模块提供的接口
Exports:exports
是一个对象,用来向外提供模块接口
Module:module
是一个对象,上面存储了与当前模块相关联的一些属性和方法

//定义模块 myModule.js
define(function(require, exports, module){
    var $ = require("jquery.js")
    $("div").addClass("active")
})

//加载模块
seajs.use(['myModule.js'], function(my){

})

3. 使用 requirejs 完成企业建站功能包括:

1. 首屏大图为全屏轮播
2. 有回到顶部功能
3. 图片区使用瀑布流布局(图片高度不一),下部有加载更多按钮,点击加载更多会加载更多数据(数据在后端 mock)
4. 使用 r.js 打包应用

企业建站模块化_效果预览

gitHub_代码预览

你可能感兴趣的:(AMD_CMD_RequireJS_模块化)