CMD 推崇依赖就近,AMD 推崇依赖前置
// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此处略去 100 行
var b = require('./b') // 依赖可以就近书写
b.doSomething()
// ...
})
// AMD 默认推荐的是
define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好
a.doSomething()
// 此处略去 100 行
b.doSomething()
...
})
语法 | commonJS | ES6 | AMD | CMD |
---|---|---|---|---|
导出 | module.exports = {} exports = {} | export default {} export var a = 10 | define(id?: String,dependencies?: String[], factory: Function(Object); | define(function(require, exports, module) {}); |
导入 | require(‘module’) | import module from ‘module’ | require([‘myModule’], function(myModule) {}); | var a = require(‘./a’);require.async(‘./b’, function(b) {}); |
加载 | 动态 – 同步 | 静态 | 动态 – 异步 | 动态 – 同步或异步 |
导出的对象 | 副本 | 引用 | ||
多次导出 | 同一个对象 | |||
模块作用域 | 文件 | 文件 | 文件 | |
循环加载时 | 加载已执行的部分 | 开发者控制(玄学) | ||
node支持 | 是 | 否 | 是 | |
典型环境 | nodejs | (babel,vue) | requireJs | Sea.js |