背景

时常接触到模块化,amd,cmd这些东西,但从来没认真去看过,去了解过,糊里糊涂的,这次就想把整个研究透彻。

CommonJS

  1. CommonJS定义的模块分为:

    • 模块引用(require)
    • 模块输出(exports)
    • 模块标识(module)
  2. CommonJS 是一个更偏向于服务端的规范, 是同步加载模块。

  3. CommonJS的一个模块就是一个脚本文件。require命令第一次加载该脚本时就会执行整个脚本,然后在内存中生成一个对象。

    1
    2
    3
    4
    5
    6
    {
    id: '...',
    exports: { ... },
    loaded: true,
    ...
    }
  4. 为什么不适合浏览器
    由于CommonJS是同步加载模块,这对于服务器端不是一个问题,因为所有的模块都放在本地硬盘。等待模块时间就是硬盘读取文件时间,很小。
    但是,对于浏览器而言,它需要从服务器加载模块,涉及到网速,代理等原因,一旦等待时间过长,浏览器处于”假死”状态。
    所以在浏览器端,不适合于CommonJS规范。所以在浏览器端又出现了一个规范—AMD(AMD是RequireJs在推广过程中对模块定义的规范化产出)。

AMD (AMD是”Asynchronous Module Definition”的缩写,即”异步模块定义”)

  1. 特点:
    • 它采用异步方式加载模块,模块的加载不影响它后面语句的运行。
    • AMD也采用require命令加载模块: require([module], callback)

阅读剩下更多

默认配图