美文网首页
commonjs、amd、cmd、umd

commonjs、amd、cmd、umd

作者: 姜治宇 | 来源:发表于2023-07-13 11:39 被阅读0次

    commonjs、amd、cmd和umd等五花八门的名称,都是js的模块化规范标准。
    在没有模块化的时代,我们一般是这么写代码的:

    <script src="module1.js"></script>
    <script src="module2.js"></script>
    <script src="libraryA.js"></script>
    <script src="module3.js"></script>
    ...
    ...
    ...
    

    模块把接口暴露到全局对象下(比如window),各个模块可以通过全局对象访问各个依赖的接口,但是也存在一些问题:
    1、变量污染;
    2、脚本加载的依赖顺序;
    模块化方案帮我们解决了以上难题,但其标准并不一致。

    commonjs

    一个模块可以通过exports或者module.exports导出API,然后通过require同步引入。注意是同步哦,因此适用于node服务端。
    而浏览器端一般是异步加载,因此诞生出两种异步方案:amd和cmd。

    amd和cmd

    amd是requirejs,cmd是seajs,二者差别不大,都是define一个模块,然后通过require加载。

    umd

    umd就是同步和异步模块加载的兼容,实现起来也比较简单,加个判断就行。webpack就是干这事的。

    (function (root, factory) {
     if (typeof define === "function" && define.amd) {
    // AMD
    define(["jquery"], factory);
    } else if (typeof exports === "object") {
    // Node, CommonJS之类的
    module.exports = factory(require("jquery"));
    } else {
    // 浏览器全局变量(root 即 window)
    root.returnExports = factory(root.jQuery);
    }
    }(this, function ($) {
     // 方法
     function test(){}; 
    
     // 暴露公共方法
     return test;
    }));
    

    ES6 module

    其实我们常用的是es6的module规范,通过export导出模块,然后import加载。但因兼容性问题,目前都是结合babel和webpack来使用的。

    相关文章

      网友评论

          本文标题:commonjs、amd、cmd、umd

          本文链接:https://www.haomeiwen.com/subject/sbjmudtx.html