CommonJS 与 Node.js 的关系?

先有 CommonJS 还是 Node.js ?

是 Node.js 成就了 CommonJS ?

CommonJS 规范是 Node.js 作者创建的吗?

为什么大家谈到 CommonJS 就会涉及 Node.js,只是因为 Node.js 目前应用广泛?

虽然知道 CommonJS 规范的使用,但对于二者的关系不是很了解,一直很纳闷,去网上搜索过,基本上都在讲规范的东西,有点答非所问的意思,没找到我想要的答案。

跪求一个清晰的解释,谢谢。

阅读 7.4k
5 个回答

1、先有 CommonJS。

2、可以这么说,毕竟两者时代很接近,也无法证实假如没有 Node.js,CommonJS 还能不能广泛流行。

3、不是,两个作者认识,但并没有一起共事过。

4、也不能说只是吧。毕竟现存的模块化解决方案就那么几个:ES Module、AMD、CMD、CommonJS,以及大杂烩 UMD,你也绕不过去它啊。

5、下面细讲。


细节讲述请参考:《编程时间简史系列》JavaScript 模块化的历史进程

commonJS是node的模块化规范,由于node出来的时候ES的标准模块规范还没有出来,node又需要使用模块化开发来规范代码模块。
你的疑问
1. 先有 CommonJS 还是 Node.js ?
先有的规范,node.js 借鉴规范实现了自己的模块化系统
2.CommonJS 规范是 Node.js 作者创建的吗?
不是,node.js 是借鉴了这一规范
最新版的node.js已经推荐采用标准的EM模块规范了,大家谈到 CommonJS 就会涉及 Node.js是因为初期几乎大部分的node模块都是基于CommonJS 规范的

就各位的回答,总结一下:

  1. CommonJS 是一种规范,Node.js 只是 CommonJS 的其中一个实现,仅此而已。(自然是先有规范,再有实现啦)
  2. Node.js 被广泛使用,让更多地人知道了 CommonJS 规范。所以说 Node.js 成就了 CommonJS ,应该没毛病。
  3. 为什么需要 CommonJS?
我们都知道,在ES6之前,原生 JavaScript 并没有内置的模块系统。JavaScript 诞生之初只是作为一个脚本语言来做一些很简单的表单校验等工作。但前端的发展,尤其是 Ajax 诞生以后,JavaScript 能做的事情越来越多,自然业务会变得越来越复杂。如果再像以前那样使用一个一个的 <script> 标签引入 JavaScript 代码,会造成越来越难维护,全局变量污染等一系列的问题。所以我们需要模块化来解决这些乱七八糟的东西。

每个文件就是一个模块,有自己的作用域,在该文件定义的变量、函数等都是私有的,对其他文件不可见,我们只管对外输出所需要的接口即可。

如果有不妥,欢迎指出。

node之所以能够解析JavaScript代码,是因为它将Google浏览器中的v8引擎移植过来了,集成在了Node.js中。所以,将JavaScript代码放在Node.js中运行,也是会被解析的。从这一点来看,Node.js其实就是JavaScript除浏览器之外另一个运行环境。但是浏览器和Node.js还是有一些区别,比如:JavaScript在浏览器中遵循ECMAScript标准,在Node.js中遵循CommonJS标准。CommonJS中没有dom操作,所以JavaScript在看浏览器中可操作dom,但是在Node.js中不能。Node.js中集成了大量的库,也可依赖大量的第三方库。JavaScript在Node.js可以做服务端开发,在浏览器中做前端开发。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏