CommonJS


  • CommonJS一般用于服务端,Nodejs与webpack就是CommonJS的主要实践者。

  • 四个重要的变量为模块化提供支持:module、exports、require、global。

  • 用 module.exports=value 或者exports.xxx = value 来定义当前模块对外输出的接口,使用require加载模块。

  • 在CommonJS中,一个文件就是一个模块,每个文件拥有单独的作用域,不会污染全局作用域。

  • CommonJS不适用浏览器是因为:此规范是同步加载模块,对于服务器端来说,所有的模块都是在本地磁盘,等待模块时间就是硬盘读取文件时间,很小,但对浏览器而言,设计到网速、代理等原因,同步加载会造成阻塞,浏览器处于“假死”状态,所以浏览器端出现了AMD规范。

AMD(异步模块定义) & CMD(通用模块定义)


  • AMD和CMD都是用来解决浏览器异步加载的问题。

  • AMD是Asynchronous Module Definition的缩写,即“异步模块定义”,它采用异步方式加载模块(模块的加载不影响它后面语句的运行),且会提前加载。

  • AMD同CommonJS一样也是使用require加载模块,不同的是,AMD要求两个参数require([Module],callback)

  • CMD与AMD最大的不同就是:CMD推崇依赖就近,延迟执行。可以在代码的任意一行写入依赖:

ES6 Module


ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,旨在成为浏览器和服务器通用的模块解决方案。其模块功能主要由两个命令构成:export和import.

export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

ES6还提供了export default命令,为模块指定默认输出,对应的import语句不需要使用大括号.