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缓存
- 以后再加载模块时,会直接从缓存中加载
参考资料
《深入浅出Node.js》作者:朴灵 第二章 模块机制
开发工具