模块化 CommonJS AMD CMD

CommonJS 

CommonJS API定义很多普通应用程序使用的API,它的目标是提供一个类似Python,Ruby和Java标准库。开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的JavaScript解释器和不同的主机环境中。

NodeJS是CommonJS规范的实现,webpack 也是以CommonJS的形式来书写。

CommonJS规范,一个单独的文件就是一个模块。该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性,把希望输出的内容放入一个对象,用module.exports暴露出来,供其他模块用require加载。

nodejs 和 webpack 都是根据

//模块定义 model.js

function fun1(){
   ...
}
function fun2(){
}

module.exports = {
    fun1: fun1,
    fun2: fun2
}

//加载模块

var myModel= require('./model.js');

nameModule.fun1();
nameModule.fun2();

  

浏览器不兼容CommonJS的根本原因,在于 module exports require global缺少四个Node.js环境的变量。

AMD

AMD 即Asynchronous Module Definition,中文名是异步模块定义的意思。它是一个在浏览器端模块化开发的规范,AMD推崇依赖前置

使用AMD规范进行页面开发需要用到RequireJS,

看一个使用requireJS的例子

     //定义模块 fun.js
     define(function (){
    var add = function (x,y){
      return x+y;
    };

    return {
      add: add
    };

  });
     //加载模块 myModel.js
  require(['fun'], function (fun){

    alert(fun.add(1,1));

  });

require()函数在加载依赖的模块的时候是异步加载的,只有前面的模块都加载成功后,模块内方法才会执行,解决了依赖性的问题和浏览器卡死的问题。

CMD

CMD 即Common Module Definition通用模块定义,CMD规范是国内发展出来的。

在CMD中 一个文件就是一个模块,所以可以用文件名作为模块ID  ,CMD推崇依赖就近,可以把依赖写进你的代码中的任意一行.

但是需要牺牲一些性能在代码运行时先找出这些依赖。toString   正则  -》 require 

define(function(require, exports, module) {
  var $ = require('jquery.js')
  ....
});

猜你喜欢

转载自www.cnblogs.com/siten/p/9242064.html
今日推荐