一、CMD(Common Module Definition)。CMD规范专门用于浏览器端,模块的加载是异步的,模块使用时才会加载执行。CMD规范整合了CommonJS和AMD规范的特点。在 Sea.js 中,所有 JavaScript 模块都遵循 CMD模块定义规范。
基本语法
一、定义暴露模块:define(function() { exports.xxx = value 或 module.exports = value}),
//定义没有依赖的模块
define(function(require, exports, module){
exports.xxx = value
module.exports = value
})
//定义有依赖的模块
define(function(require, exports, module){
//引入依赖模块(同步)
var module2 = require('./module2')
//引入依赖模块(异步)
require.async('./module3', function (m3) {
})
//暴露模块
exports.xxx = value
})
二、引入使用模块:require(xxx)
define(function (require) {
var m1 = require('./module1')
var m4 = require('./module4')
m1.show()
m4.show()
})
核心实现
// ajax
function myAjax(url, callback) {
var xhr = new XMLHttpRequest()
xhr.open('get', url)
xhr.send()
xhr.onreadystatechange = function () {
if (request.readyState === 4) {
if (request.status === 200) {
return callback(request.responseText)
} else {
// ...
}
} else {
// ...
}
}
}
function require(url) {
myAjax(url, function (res) {
// 此时res的对应JS的String形式
// 解析 省略
// 执行
eval(res)
})
}