UMD 统一模块定义规范,希望提供一个前后端跨平台的解决方案(支持AMD和CommonJS 规范)

    实现原理

    1. 判断是否支持NodeJs 的模块格式 (exports是否存在)
    2. 再判断是否支持AMD (definee是否存在),存在则使用AMD方式加载
    3. 前两个都不存在,则将模块暴露到全局
    1. // 如果模块没有依赖,上面的规律可以简化如下
    2. (function(root, factory){
    3. //检查是否支持amd
    4. if (typeof define === 'function' && define.amd) {
    5. define([], factory)
    6. } else if (typeof exports === 'object') {
    7. // Node, 不支持严格模式下的CommonJS,
    8. module.exports = factory()
    9. } else if (typeof define === 'function' && define.cmd) {
    10. // CMD,
    11. define(function(require, exports, module) {
    12. module.exports = factory()
    13. })
    14. }
    15. else {
    16. // Browser global (root is window)
    17. root.returnExports = factory();
    18. }
    19. })(this, function() {
    20. // 返回module.exports暴露的值
    21. // 本例子将会返回一个对象
    22. // 但是模块也可以返回函数或者被导出的值
    23. return {}
    24. })

    参考链接:可能是最详细的UMD模块入门指南 猿出道