CommonJS,AMD和RequireJS之间的关系?

我对CommonJS,AMD和RequireJS仍然很困惑。即使阅读了很多。

我知道CommonJS(以前称为ServerJS)是用于在浏览器之外使用该语言时定义一些JavaScript规范(即模块)的组。CommonJS模块规范具有某些实现,例如Node.js或RingoJS,对吗?

CommonJS,异步模块定义(AMD)和RequireJS之间有什么关系?RequireJS是CommonJS模块定义的实现吗?如果是,那么AMD是什么?

樱十三2020/03/10 12:13:02

报价单

AMD

  • 一种浏览器优先的方法
  • 选择异步行为并简化向后兼容性
  • 它没有文件I / O的任何概念。
  • 它支持对象,函数,构造函数,字符串,JSON和许多其他类型的模块。

CommonJS

  • 一种服务器优先的方法
  • 假设同步行为
  • 涵盖更广泛的关注点,例如I / O,文件系统,承诺等。
  • 支持展开的模块,可以感觉到更接近ES.next/Harmony规范,从而使您摆脱了AMD强制执行的define()包装器
  • 仅支持将对象作为模块。
西门GO2020/03/10 12:13:02

CommonJS不仅限于此-它是一个为JavaScript定义通用API和生态系统的项目。CommonJS的一部分是模块规范。Node.js和RingoJS是服务器端JavaScript运行时,是的,它们都基于CommonJS Module规范实现模块。

AMD(异步模块定义)是另一种模块规范。RequireJS可能是AMD最受欢迎的实现。与CommonJS的主要区别在于AMD指定异步加载模块-这意味着模块是并行加载的,而不是通过等待加载完成来阻止执行。

因此,AMD通常更多地用于客户端(浏览器)JavaScript开发中,而CommonJS模块通常用于服务器端。但是,您可以在任何一种环境中使用任何一种模块规范-例如,RequireJS提供了在Node.js中运行的说明,browserify是可以在浏览器中运行的CommonJS Module实现。