前端模块化规范


Q: 为什么要有模块?
A: 为了代码复用。

Q:为什么要有模块化规范?
A: 为了约束大家统一模块的写法。

CommonJS
Node.js采用的便是CommonJS规范

var a = require('moudleA')   
a.doSomething()  

这种加载是同步加载(因为服务端是直接从磁盘读取文件,所以可以做到同步加载)。


AMD (Asynchronous Module Definition )

require(['moudleA'],function(a){
	a.doSomething()
})  

require.js和curl.js采用的便是AMD规范

wiki:AMD (中文版)


CMD(Common Module Definition)

sea.js遵循的是CMD规范,CMD规范和AMD规范的区别:

CMD推崇 as lazy as possible ,依赖就近
AMD推崇依赖前置

//CMD  
define(funciton(require,exports,moudle){
	var a = require('moudleA')
	a.doSomething()
	//省略100行  
	var b = require('moudleB')
	b.doSomething()  
})
//AMD  
define(['moudleA','moudleB'],function(a,b){
	a.doSomething()
	//省略100行  
	b.doSomething
})

ES6 module

基本用法:

//moudleA.js
export function a(){
	doSomething()
}  
//main.js
import {a} from './moudleA' 
a()

//moudleA.js  
export default function a(){
	doSomething()
}
//main.js  
import whatever from './moudleA'  
whatever()

感谢阅读,如有错误,欢迎指出。