gpt4 book ai didi

javascript - CommonJS、AMD 和 RequireJS 之间的关系?

转载 作者:行者123 更新时间:2023-11-28 06:25:44 25 4
gpt4 key购买 nike

即使读了很多书,我仍然对 CommonJS、AMDRequireJS 感到非常困惑。

我知道CommonJS(以前的ServerJS)是一个在外部使用该语言时定义一些JavaScript规范(即模块)的组浏览器。 CommonJS 模块规范有一些实现,例如 Node.jsRingoJS,对吗?

What's the relation between CommonJS, Asynchronous Module Definition (AMD) and RequireJS?

Is RequireJS an implementation of the CommonJS module definition? If yes, what's AMD then?

最佳答案

RequireJS 实现 AMD API (source) .

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 并不是专门为浏览器设计的,所以它不太适合浏览器环境(*我真的没有这方面的来源——它只是到处这么说,包括 the RequireJS site.* )显然,这个与异步加载等有关

另一方面,RequireJS 实现了 AMD,它旨在适应浏览器环境 ( source )。显然,AMD 最初是 CommonJS Transport 格式的衍生品,后来发展成为自己的模块定义 API。因此两者之间存在相似之处。 AMD 中的新功能是 define() 函数,该函数允许模块在加载之前声明其依赖项。例如,定义可以是:

define('module/id/string', ['module', 'dependency', 'array'], 
function(module, factory function) {
return ModuleContents;
});

因此,CommonJS 和 AMD 是 JavaScript 模块定义 API,它们具有不同的实现,但两者都来自相同的起源。

  • AMD更适合浏览器,因为它支持异步加载模块依赖项。
  • RequireJSAMD 的实现,同时试图保持 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/35145781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com