CommonJS是可以搭载的标准还是仅仅是另一个JavaScript模块系统?

时间:2018-01-08 00:47:46

标签: javascript module commonjs

维基百科对CommonJS说明了这一点:

  

[CommonJS]是一个旨在为其指定生态系统的项目   浏览器外的JavaScript

据我所知,这意味着CommonJS是一个与ES正在使用的平台无关的系统。这是否意味着,当在Web浏览器的上下文中使用它时,它本质上只是另一个大型polyfill(如SystemJS),对于ES模块系统?或者它是否位于SystemJS或WebPack等模块系统下面,使得系统平台不可知?

1 个答案:

答案 0 :(得分:1)

与SystemJS不同,CommonJS本身是specification,而不是模块加载器。它与平台无关,因为它依赖于核心ECMAScript 5语法/功能;它指定了一组要定义的字段 - module.exports - 以及读取它们的方法 - require - 以便更好地进行代码组织。它可能被认为是ES6模块语法的非官方前身。 AMD(异步模块定义)是一个竞争的非官方标准forked from CommonJS,由Require.js实现。

可能因为它是非官方的,浏览器不包含对CommonJS模块的任何本机支持,并且使用需要某种模块加载器实现对CommonJS的支持(如Browserify)。 Node.js实现了CommonJS规范,但在运行时甚至实现了函数wraps its module executions

CommonJS是较早的模式之一(described as"草根努力",而不是官方ECMAScript规范添加),旨在解释JavaScript缺乏代码组织。根据{{​​3}}),它创建于2009年,大约在同一时间Node.js为project's website,旨在为非浏览器执行环境提供模块结构(尽管它可以轻松应用于浏览器巨型脚本和全局变量同样存在问题)。该项目是originally released的结果。

所以要回答你的标题问题,这是一个非官方的标准,当ES6模块(几乎)得到普遍支持时,这个标准将会过时。