【问题标题】:Is CommonJS a standard that can be piggybacked on or is it just another JavaScript module system?CommonJS 是一个可以搭载的标准,还是只是另一个 JavaScript 模块系统?
【发布时间】:2018-06-17 00:00:57
【问题描述】:

维基百科这样描述 CommonJS:

[CommonJS] 是一个旨在为 浏览器外的 JavaScript

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

【问题讨论】:

    标签: javascript module commonjs


    【解决方案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 是“草根工作”,而不是官方的 ECMAScript 规范添加),旨在解决 JavaScript 缺乏代码组织的问题。根据project's website),它创建于 2009 年,大约在同一时间 Node.js 是originally released,旨在为非浏览器执行环境提供模块结构(尽管它可以轻松应用于大型脚本和全局变量同样有问题)。该项目是this blog post的结果。

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

    【讨论】:

    • 谢谢 Greg,那么 SystemJS 或 WebPack 理论上可以调用 CommonJS 吗?同样,他们是否可以利用 AMD,因为现在总体上是首选?
    • SystemJS 和 Webpack 的文档都声明它们同时支持 CommonJS 和 AMD,并且都将它们转换成各自的最终格式以用于生产。
    猜你喜欢
    • 2019-11-19
    • 2010-12-30
    • 2019-08-18
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    相关资源
    最近更新 更多