今天读了《深刻浅出Nodejs》的第二章:模块机制。如今作一个简单的小结。前端
序:模块机制大体从这几个部分来说:JS模块机制的由来、CommonJS AMD CMD、Node模块机制和包和npm。node
1. JS模块机制的由来npm
因为JS先天地缺少一项功能:模块。经过<script></script>标签引入代码的方式显得杂乱无章。社区也为JS指定了相应的规范,CommomJS的出现是其中最重要的里程碑。后端
2. CommomJS规范缓存
require()方法,这个方法用来接收模块标识 ,以此来引入一个模块的API到上下文中;异步
exports是module的属性;ui
在node中,一个文件就是一个模块;spa
CommonJS构建的这套模块导出和引入机制使得用户没必要考虑变量污染的问题。对象
3. Node模块实现ip
Node有这样的几类模块:文件模块(用户编写)、核心模块(Node提供的模块)、内建模块。加载的机制是先作路径分析,分析没有问题后,开始文件定位,文件定位没有问题后,就开始编译执行。
其中,加载文件机制有一个特色,就是优先从缓存中加载。在Node中,每个模块都是一个对象。
4. 包和npm
包和npm是将模块链接起来的一种机制。Node是对CommomJS规范的一种具体实现,必定程度上解决了变量依赖、依赖关系等代码组织的问题 。包的出现,则是在模块的基础上,进一步组织JS代码。
5. CommomJS、AMD、CMD
CommonJS是为后端指定的规范,并不彻底适合前端的应用场景。AMD最终在前端场景中胜出,是由于它是“异步模块定义”。可是AMD须要在声明引用模块的时候,指定全部的依赖;而玉伯提出的CMD则支持动态加载模块,即在须要依赖模块时,使用require()引入便可 。