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')
....
});