CommonJS与AMD的区别

作者: Splendid飞羽 | 来源:发表于2020-08-18 23:32 被阅读0次

本文主要就JavaScript语言的模块化历史进行展开,文章主要内容参考阮老师的日志。这里放上传送门
Javascript模块化编程(一):模块的写法
Javascript模块化编程(二):AMD规范
Javascript模块化编程(三):require.js的用法

1、模块的规范

在ES6标准出来之前,社区制定了一些模块加载方案,其中最主要的包括CommonJS和AMD两种,前者用于服务器,后者用于浏览器。而自从es6的标准语言层面出来之后,模块化的功能得以普及,而且接受起来比较简单,并且逐步取代CommonJS和AMD规范,成为浏览器和服务器最为通用的解决方案。

2、CommonJs服务器端编程

nodejs自从2009年发明以来,将javascript语言用于服务器端编程,这标志"Javascript模块化编程"正式诞生。(服务器端,模块化是必须的,只有这样才能与操作系统和其他模块进行编程互动)

背景:node.js的模块系统,就是参照CommonJS规范实现的。
在CommonJS中,有一个全局性方法require(),用于加载模块,这里的加载时同步的,也就是说在服务器端,文模块的加载是同步的,模块(js)存放在文件系统中,所以即使同步读取取不会有影响。
下面举例说明:

假定有一个模块a.js

let a = {
 add(a, b){
     return a + b;
 }
}
export a;

其他模块引入a模块,比如模块b中

let a = require('./a.js');
a.add(1, 2) //3

说明:这个在服务器端是完全没有问题的,因为同步加载,可以先加载然后调用方法。

3、AMD浏览器端编程

背景:而在浏览器客户端中,由于js的执行从上往下解析,如果通过require引入的模块必须等待模块加载完成,才能调用里面的方法,这样浏览器就会出现假死状态,网页响应延时等不好的体验,因此浏览器中的模块不能采用'同步加载',只能采用异步加载,AMD异步加载由此孕育而生。

AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"
AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:
require([module], callback);

第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:

  require(['a'], function (a) {
    a.add(2, 3);
  });

a.add()与a模块加载不是同步的,浏览器不会发生假死。所以很显然,AMD比较适合浏览器环境。

相关文章

  • CommonJS与AMD的区别

    本文主要就JavaScript语言的模块化历史进行展开,文章主要内容参考阮老师的日志。这里放上传送门Javascr...

  • js.module 多种模式的开发

    AMD CommonJS

  • Commonjs规范

    CommonJS和AMD CommonJS Nodejs的模块系统就采用CommonJS模式。CommonJS标准...

  • 前端工程化的一些理解

    一、模块化 主要是js模块化,可以使用CommonJS、AMD、CMD等模块化规范,其中的区别是CommonJS对...

  • 模块规范CommonJS以及AMD、CMD

    本文目录: 1.原始写法 2.CommonJS规范 3.AMD规范 4.CMD规范 5.AMD和CMD的区别 6....

  • gulp-babel

    因amd和commonjs都是require转换时默认commonjs,如需AMD转换,也可以填写UMD

  • js的模块方案:CommonJS、AMD和CMD

    什么是CommonJS、AMD和CMD CommonJS、AMD和CMD都是js的模块加载方案,JS在最初设计的时...

  • 归档

    AMD、CMD、CommonJs、ES6的对比 他们都是用于在模块化定义中使用的,AMD、CMD、CommonJs...

  • JS模块化

    模块化规范:CommonJS,AMD,CMD,UMD,ES6 Module CommonJS CommonJS是服...

  • AMD、CMD和CommonJS的区别

    CommonJS CommonJS 是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比...

网友评论

    本文标题:CommonJS与AMD的区别

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