CommonJS
有三个全局变量 module
、exports
和 require
。可是因为 AMD
也有 require
这个全局变量,故不使用这个变量来进行检测。javascript
若是想要对外提供接口的话,能够将接口绑定到 exports
(即 module.exports
) 上。java
function MyModule() { // ... } if(typeof module !== `undefined` && typeof exports === `object`) { module.exports = MyModule; }
CMD
规范中定义了 define
函数有一个公有属性 define.cmd
。函数
CMD
模块中有两种方式提供对外的接口,一种是 exports.MyModule = ...
,一种是使用 return
进行返回。ui
AMD
规范中,define
函数一样有一个公有属性 define.amd
。this
AMD
中的参数即是这个模块的依赖。那么如何在 AMD
中提供接口呢?它是返回一个对象,这个对象就做为这个模块的接口,故咱们能够这样写:code
function MyModule() { // ... } if(typeof define === `function` && define.amd) { define(function() { return MyModule; }); }
咱们除了提供 AMD
模块接口,CMD
模块接口,还得提供原生的 JS 接口。
因为 CMD
和 AMD
均可以使用 return
来定义对外接口,故能够合并成一句代码。对象
一个直接能够用的代码以下:接口
;(function(){ function MyModule() { // ... } var moduleName = MyModule; if (typeof module !== 'undefined' && typeof exports === 'object') { module.exports = moduleName; } else if (typeof define === 'function' && (define.amd || define.cmd)) { define(function() { return moduleName; }); } else { this.moduleName = moduleName; } }).call(this || (typeof window !== 'undefined' ? window : global);