我仍然对 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,它们具有不同的实现,但都来自相同的起源。
更让您困惑的是,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/