JS模块化开发的标准
1. AMD
`
//a.js
define(function(){
console.log('执行a.js');
return{
name: function(){
console.log('My name is A');
}
}
});
`
`
//b.js
define(function(){
console.log('执行b.js');
return {
name: function(){
console.log('My name is B');
}
}
})
`
`
//main.js
define(['a','b'], // 输出'执行a.js' '执行b.js'
function(){
console.log('执行main.js'); // 输出 '执行main.js'
a.name(); // 输出 'My name is A'
$('#b').click(function(){
b.name(); // 输出 'My name is B'
})
});
`
2. CMD
`
//a.js
define(function(){
console.log('执行a.js');
return{
name: function(){
console.log('My name is A');
}
}
});
`
`
//b.js
define(function(){
console.log('执行b.js');
return {
name: function(){
console.log('My name is B');
}
}
})
`
`
//main.js
define(function(){
console.log('执行main.js'); // 输出 '执行main.js'
var a = require('a');
a.name(); // 输出 '执行a.js' 'My name is A'
$('#b').click(function(){
var b = require('b');
b.name(); // 输出 '执行b.js' 'My name is B'
})
});
`
3. CommonJS
`
// a.js
var name = 'My name is A'
moduel.exportds = {name}
`
`
// main.js
var aModuel = require('路径/a.js');]
var name = aModuel.name
console.log(name) // 输出:'My name is A'
`
对比
CMD: 在需要的地方才引入(后置依赖)。遍历入口文件内容,找到require字段,加载依赖模块,但并不执行。执行到需要的代码时,才执行依赖模块,为了防止出错,必须同步执行完依赖模块再执行主模块内容。
执行文件顺序是可控的,执行等待时间会累加
AMD: 在执行入口文件正式内容前,加载并执行依赖模块(依赖前置)。主模块内容置于回调函数中,即加载执行完依赖模块再回调执行主模块。
依赖模块的加载顺序不确定
CommonJS: 模块加载的顺序,按照其在代码中出现的顺序,同步加载
代表
CommonsJS: nodeJs, 服务端规范
AMD: RequireJs, 浏览器端规范
CMD: SeaJS, 浏览器端规范
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。