关于CommonJS,聊一聊你可能不知道的内容

147 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

1.CommonJS是什么

从CommonJS本身来看,它是一个规范(官网中提到的specification),笔者发现很少有帖子对这个问题正面回答。

CommonJS在更名之前是ServerJS,它是由Mozilla的工程师Kevin Dangoor在2009年1月发起的一个项目。开始的时候称为ServerJS。它通过Google的Group发起了一些提议,并且制定了一些规范。在2009年8月的时候,这个Google Group的名字变更为了 CommonJS。 如下:

image-20220803145225679.png

而我们平时所讨论的CommonJS,实际上是指具体的CommonJS中明确提到的模块规范或者说是标准,也就是指:

  • Modules/1.0
  • Modules/1.1
  • Modules/1.1.1
  • Packages/1.0
  • System/1.0

这个规范的具体内容不再进一步说明了,它在官方的文档上有明确详细的说明针对RequireModule ContextModule Identifiers

2.CommonJS的宗旨

CommonJS它是针对前端走向工程化过程中的一个产物。将一个复杂的文件有针对性的拆分几个文件,拆开以后模块的内部是私有的,但是要向外暴露接口和其他的模块进行交互。

它实际上目标是致力于创建一个生态。就像python中通过pip安装依赖包以后通过import调用,java中使用import引用其他的jar包,以及c#中在visualstudio中通过添加dll的引用后使用using引入。通过构建、封装、上传、共享,打造一个以javascript为基础,可以应用于服务器端或者浏览器端,以及其他环境下的完整生态。

3.CommonJS的应用

CommonJS在Node.js中的应用,就是当前非常重要,并且被广泛应用的一种服务器端的实现。

而在浏览器端对于JavaScript的开发,由于浏览器不支持CommonJS,在浏览器中直接使用require调用的情况下,会提示require is undefined。所以需要借助browserify进行转译。

4.CommonJS带来了什么

①不用关心html中script标签引入的顺序

②不用担心window下全局变量的定义导致出现脏代码的相互影响

③针对版本的版本的管理方便明了

④针对不同业务模块的解耦可以更容易的剥离解耦

⑤解耦之后独立性增加,更有利于代码共享分享