UMD 统一模块定义规范,希望提供一个前后端跨平台的解决方案(支持AMD和CommonJS 规范)
实现原理
- 判断是否支持NodeJs 的模块格式 (exports是否存在)
- 再判断是否支持AMD (definee是否存在),存在则使用AMD方式加载
- 前两个都不存在,则将模块暴露到全局
// 如果模块没有依赖,上面的规律可以简化如下(function(root, factory){//检查是否支持amdif (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模块入门指南 猿出道
