我仍然对 CommonJS、AMD RequireJS 感到非常困惑,即使在阅读了很多之后。
我知道 CommonJS (以前是 ServerJS )是一组用于定义一些 0x29314141 的 JavaScript 语言模块之外的 0x2931419.x2141419 语言规范。 CommonJS 模块规范有一些实现,例如 Node.js 或 0x2919119242142 或 0x2919119249214 18 1814213 15 18 月

最佳答案

RequireJS 实现 AMD API 0x25181241334112

CommonJS 是一种借助 exports 对象定义模块的方法,该对象定义了模块内容。简单地说,一个 CommonJS 实现可能是这样的:

// someModule.js
exports.doSomething = function() { return "foo"; };

//otherModule.js
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };

基本上,CommonJS 指定您需要有一个 require() 函数来获取依赖项,一个 exports 变量来导出模块内容和一个模块标识符(描述相关模块相对于该模块的位置)用于要求依赖项( (source) )。 CommonJS 有各种实现,包括你提到的 Node.js

CommonJS 并不是专门为浏览器设计的,所以它不太适合浏览器环境(我真的没有这方面的来源 - 它只是到处都这么说,包括 source )显然,这与异步有关加载等

另一方面,RequireJS 实现了 AMD,旨在适应浏览器环境( the RequireJS site. )。显然,AMD 最初是从 CommonJS Transport 格式衍生出来的,后来演变成它自己的模块定义 API。因此,两者之间有相似之处。 AMD 的新功能是 define() 函数,它允许模块在加载之前声明其依赖项。例如,定义可能是:
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
  return ModuleContents;
});

因此,CommonJS 和 AMD 是 JavaScript 模块定义 API,它们具有不同的实现,但都来自相同的起源。
  • AMD 更适合浏览器,因为它支持模块依赖的异步加载。
  • RequireJS AMD 的实现,而在同一时间试图保持 CommonJS的(主要是在模块标识符)的精神。

  • 更让您困惑的是,RequireJS 虽然是 AMD 实现,但提供了一个 CommonJS 包装器,因此几乎可以直接导入 CommonJS 模块以与 RequireJS 一起使用。
    define(function(require, exports, module) {
      var someModule = require('someModule'); // in the vein of node
      exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
    });
    

    我希望这有助于澄清事情!

    关于javascript - CommonJS、AMD 和 RequireJS 之间的关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16521471/

    10-13 01:41