AMD_CMD_RequireJS

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

  • 解决命名冲突
  • 依赖管理
  • 代码解耦,提高复用性
  • 提高代码可读性

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

  • CommonJS主要用于服务端模块化,node.js就是遵循CommonJS标准,CommonJS依赖node.js提供模块化的功能,它是一个同步的标准,示例代码如下:
//这是test1.js文件
var people = {
    name: 'jinlong',
    sayName: function () {
        console.log(this.name);
    }
}
module.exports = people;
//这是test2.js文件
var p = require('./test1');
p.sayName();

在终端中打开test2.js文件,输出sayName的返回值,如图所示:

AMD_CMD_RequireJS_第1张图片
高阶4.png
  • 然后是AMD , 当使用CommonJS规范的JS在浏览器端运行的话,就会出现一个问题,require的时候必须等待test1.js文件加载完,才可以引用,什么时候加载完,取决于你的网速,所以这个加载的时间如果过长的话,就会造成网页假死的现象。所以我们需要一个异步的模块化,所以就有了AMD(Asynchronous Module Definition),AMD的require和CommonJS不同,它的形式如下:
    /*
    require([module], callback);
     */

    require('test1', function(test1){
        test1.sayName();
    })

test1和 sayName不是同步的,所以浏览器不会假死,AMD适合浏览器环境。AMD一般使用require.js来提供模块化的功能。

  • CMD(Common Module Definition) , 通用模块定义,他是sea.js在推广的时候所产生的一个新的模块规范,也是用于浏览器端,不过现在很少人用了, CMD也是异步加载,它与AMD不同之处在于对依赖模块的执行时机不同,AMD依赖前置,JS可以方便的知道依赖哪个模块,立即加载。而CMD是就近依赖,它需要先把模块解析为字符串,才知道使用了哪些模块。在 CMD 规范中,一个模块就是一个文件。代码的书写格式如下:
define(factory);

示例:

//math.js
define(function(require, exports, module) {
  exports.add = function() {
    var sum = 0, i = 0, args = arguments, l = args.length;
    while (i < l) {
      sum += args[i++];   
  }
    return sum;
  };
});

//increment.js
define(function(require, exports, module) {
  var add = require('math').add;
  exports.increment = function(val) {
    return add(val, 1);
  };
});

//program.js
define(function(require, exports, module) {
  var inc = require('increment').increment;
  var a = 1;
  inc(a); // 2
  module.id == "program";
});

3.使用 requirejs 完善入门任务15,包括如下功能:

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

你可能感兴趣的:(AMD_CMD_RequireJS)