UMD 统一模块定义规范,希望提供一个前后端跨平台的解决方案(支持AMD和CommonJS 规范)
实现原理
- 判断是否支持NodeJs 的模块格式 (exports是否存在)
- 再判断是否支持AMD (definee是否存在),存在则使用AMD方式加载
- 前两个都不存在,则将模块暴露到全局
// 如果模块没有依赖,上面的规律可以简化如下
(function(root, factory){
//检查是否支持amd
if (typeof define === 'function' && define.amd) {
define([], factory)
} else if (typeof exports === 'object') {
// Node, 不支持严格模式下的CommonJS,
module.exports = factory()
} else if (typeof define === 'function' && define.cmd) {
// CMD,
define(function(require, exports, module) {
module.exports = factory()
})
}
else {
// Browser global (root is window)
root.returnExports = factory();
}
})(this, function() {
// 返回module.exports暴露的值
// 本例子将会返回一个对象
// 但是模块也可以返回函数或者被导出的值
return {}
})
参考链接:可能是最详细的UMD模块入门指南 猿出道