通用模块定义(UMD)

当我们的模块需要由许多不同的模块加载器(例如 AMD,CommonJS)导入时,使用 UMD(通用模块定义)模式。

模式本身由两部分组成:

  1. IIFE(立即调用的函数表达式),用于检查用户正在实现的模块加载器。这将有两个论点; rootthis 对全局范围的引用)和 factory(我们声明模块的函数)。

  2. 一个创建我们模块的匿名函数。这作为模式的 IIFE 部分的第二个参数传递。此函数传递任意数量的参数以指定模块的依赖关系。

在下面的例子中,我们检查 AMD,然后检查 CommonJS。如果这些加载器都没有被使用,我们就会回归到使模块及其依赖关系全局可用。

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(['exports', 'b'], factory);
    } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
        // CommonJS
        factory(exports, require('b'));
    } else {
        // Browser globals
        factory((root.commonJsStrict = {}), root.b);
    }
}(this, function (exports, b) {
    //use b in some fashion.

    // attach properties to the exports object to define
    // the exported module properties.
    exports.action = function () {};
}));