UMD(Universal Module Definition)是一种通用的模块定义规范,它允许模块在不同的环境中使用,包括浏览器端和服务器端(如 Node.js)。UMD 模块兼容 CommonJS、AMD 和全局变量的使用,因此可以在不同的模块化环境中使用。

下面是一个简单的 UMD 模块的示例:

 

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD
        define([], factory);
    } else if (typeof exports === 'object') {
        // CommonJS
        module.exports = factory();
    } else {
        // 浏览器全局变量
        root.MyModule = factory();
    }
}(this, function () {
    // 模块的实现
    function greet(name) {
        return "Hello, " + name + "!";
    }

    // 返回模块的公共接口
    return {
        greet: greet
    };
}));

 

这个 UMD 模块定义了一个名为 MyModule 的模块,其中包含一个 greet 函数,用于向传入的 name 参数打招呼。

这个模块首先检查当前的环境,如果是 AMD 规范,则使用 define 函数来定义模块;如果是 CommonJS 规范,则将模块导出给 module.exports;如果是浏览器环境,则将模块挂载到全局变量 MyModule 上。

通过这种方式,这个 UMD 模块可以在不同的模块化环境中使用,无需修改代码。在浏览器中,您可以通过将该脚本文件包含在 HTML 页面中,并通过全局变量 MyModule 来使用模块的功能。在 Node.js 中,您可以使用 require 函数来引入该模块,然后调用 MyModule.greet() 来使用其功能。