当前位置: 首页 > 面试题库 >

CommonJS,AMD和RequireJS之间的关系?

吴哲
2023-03-14
问题内容

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

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

CommonJS异步模块定义 (AMD)和 RequireJS 之间有什么关系?

RequireJS 的的实现 CommonJS的 模块定义?如果是,那么 AMD 是什么?


问题答案:

RequireJS 实现 AMD API

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用于导出模块内容的变量以及一个用于要求依赖项的模块标识符描述了该模块相对于该模块的位置。CommonJS具有各种实现,包括您提到的
Node.js。

CommonJS并不是专门为浏览器而设计的,因此它不太适合浏览器环境我确实没有相关资源-它在包括[RequireJS网站在内的所有地方都这么说显然,这有一些不足之处异步加载等

另一方面,RequireJS实现了AMD,旨在适应浏览器环境。显然,AMD最初是从CommonJSTransport格式衍生出来的,后来演变为自己的模块定义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"; };
});

我希望这有助于澄清问题!



 类似资料:
  • 问题内容: 我想知道这些摘要之间的区别是什么。 和 两者对我来说都可以正常工作,但不能确定它们背后的目的是什么。 问题答案: 考虑第一个片段,它是CommonJS样式的: 这些调用是同步调用:返回时,它将返回您请求的模块。CommonJS 调用是同步的。有一种支持异步形式的建议,但据我所知,它尚未超出建议级别。Node.js 曾经被删除过。有一个实现它的包。使用此程序包看起来很像使用AMD样式模块

  • 概述 define方法:定义模块 require方法:调用模块 AMD模式小结 配置require.js:config方法 插件 优化器r.js 参考链接 概述 RequireJS是一个工具库,主要用于客户端的模块管理。它可以让客户端的代码分成一个个模块,实现异步或动态加载,从而提高代码的性能和可维护性。它的模块管理遵守AMD规范(Asynchronous Module Definition)。

  • 本文向大家介绍说说你对AMD和Commonjs的理解相关面试题,主要包含被问及说说你对AMD和Commonjs的理解时的应答技巧和注意事项,需要的朋友参考一下 CommonJS是服务器端模块的规范,Node.js采用了这个规范。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。 AMD推荐的风格通过返回一个对象做为模块

  • 本文向大家介绍说一下Commonjs、AMD和CMD的区别?相关面试题,主要包含被问及说一下Commonjs、AMD和CMD的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 一个模块是能实现特定功能的文件,有了模块就可以方便的使用别人的代码,想要什么功能就能加载什么模块。 Commonjs:开始于服务器端的模块化,同步定义的模块化,每个模块都是一个单独的作用域,模块输出,module

  • 问题内容: 在我的系统中,我在浏览器中加载了许多“类”,在开发过程中,每个类都有单独的文件,并串联在一起进行生产。加载它们时,它们在全局对象(这里)上初始化一个属性,如以下示例所示: 我考虑使用James Burke的建议,而不是使用自己的全局对象,而是考虑使每个类都具有自己的AMD模块: 问题在于,以前在Employee和Company之间没有声明时间依赖关系:您可以按所需的顺序放置声明,但是现

  • 问题内容: 声明“如果要将导出对象设置为函数或新对象,则必须使用module.exports对象。” 我的问题是为什么。 我console.logged结果()和第一个是。 问题答案: 是具有属性的普通JavaScript对象。是一个普通的JavaScript变量,碰巧设置为。在文件末尾,node.js基本上将“返回”该函数。在Node中查看JS文件的一种简化方法是: 如果在上设置,如,该属性也会