node的模块系统和commonJS规范的关系

在维基百科的CommonJS的目录下看到了这样一句话

在2013年5月,Node.js包管理器npm的作者Isaac Z. Schlueter,宣布Node.js已经废弃了CommonJS,Node.js核心开发者应避免使用它。

what?2013年就废弃了。现在都9102年了,感觉咋个只要一提到node就不得不说commonJS。为啥还在用。

通过查询资料能知道为啥提出commonJS规范:

CommonJS规范的提出,主要是为了弥补当前JavaScript没有标准的缺陷,以达到像Python、Ruby和Java具备开发大型应用的基础能力,而不是停留在小脚本程序的阶段。他们期望那些用CommonJS API写出的应用可以具备跨宿主环境执行的能力,这样不仅可以利用JavaScript开发富客户端应用,而且还可以编写以下应用。 -- 出处《深入浅出Node.js》作者:朴灵 第二章 模块机制

CommonJS API将通过定义满足许多常见应用程序需求的API来填补这一空白,最终提供与Python,Ruby和Java一样丰富的标准库。 目的是使应用程序开发人员能够使用CommonJS API编写应用程序,然后在不同的JavaScript解释器和主机环境中运行该应用程序。 在与CommonJS兼容的系统中,可以使用JavaScript编写

  • 服务器端JavaScript应用程序。
  • 命令行工具。
  • 桌面图形界面应用程序。
  • 混合应用(Titanium和Adobe AIR等形式的应用)。

重点来了,在《深入浅出Node.js》一书中,作者指出 : Node借鉴CommonJS的Modules规范实现了一套非常易用的模块系统。

前端模块化的规范:

  • 浏览器端的模块规范: AMD,CMD 和 ES6 规范
  • 服务器端的模块规范: commonJS

也就是说node的模块系统是根据commonJS规范实现的。废弃的只是commonJS的规范,又不是node的模块系统。而且node应用都是由模块组成的

node模块系统的特性

  • 每一个文件就是一个模块
  • 每个模块的代码都有对应的模块作用域,不会污染全局作用域
  • 模块可以多次引入(加载),只会在第一次加载的时候执行一次,加载的结果会被node缓存
  • 以后再加载模块时,会直接从缓存中加载

参考资料

http://www.commonjs.org/

https://zh.wikipedia.org/wiki/CommonJS

《深入浅出Node.js》作者:朴灵 第二章 模块机制

posted @ 2019-08-27 21:55  氵灬  阅读(144)  评论(0编辑  收藏  举报