Fe-interview: [软技能] 第183天 说说你对AMD、CMD和CommonJS的理解

Created on 15 Oct 2019  ·  3Comments  ·  Source: haizlin/fe-interview

第183天 说说你对AMD、CMD和CommonJS的理解

软技能

Most helpful comment

AMD,CMD和CommonJs是es6之前推出的模块化方案。

  1. CommonJs用在服务端
  2. AMD,CMD用在浏览器环境

一、CommonJs是由node推广使用的。
导出module.exports,导入require。

二、AMD是RequireJS在推广过程中对模块定义的规范化
它主要是异步加载模块,模块的加载不影响后面语句的执行;所有依赖这些模块的语句,都定义到一个回调函数中,等依赖模块全部加载完成后,执行回调函数。

define(['回调函数的依赖模块'], function() {
    // 回调函数,依赖模块的语句
    ...
})

define(['./a', './b'], function(a, b) { // 依赖刚开始就要去加载,加载依赖是异步加载
  // a b 依赖加载完成后,才去执行回调中语句
  a.doSomething()
  b.doSomething()
  ...
}) 

三、CMD是SeaJS在推广过程中对模块定义的规范化
它采用就近依赖,同步加载。即在用到依赖的地方,才去加载依赖。

define(function(require, exports, module) {
  var a = require('./a') // 依赖等用的时候才去加载,加载依赖是同步加载
  a.doSomething()

  var b = require('./b') 
  b.doSomething()
  // ... 
})

All 3 comments

  1. CommonJs主要针对服务端,AMD/CMD主要针对浏览器端
    2.CommonJs中nodejs就是它实现的,所以不用引入其他的包,AMD则是通过