本文共 1232 字,大约阅读时间需要 4 分钟。
在nodejs中,由于有且仅有一个入口文件(启动文件),而开发一个应用肯定会涉及到多个文件配合,因此,nodejs对模块化的需求比浏览器端要大的多
要理解模块的导出,首先要理解模块的含义
什么是模块?
模块就是一个JS文件,它实现了一部分功能,并隐藏自己的内部实现,同时提供了一些接口供其他模块使用
模块有两个核心要素:隐藏和暴露
隐藏的,是自己内部的实现
暴露的,是希望外部使用的接口
任何一个正常的模块化标准,都应该默认隐藏模块中的所有实现,而通过一些语法或api调用来暴露接口
暴露接口的过程即模块的导出
当需要使用一个模块时,使用的是该模块暴露的部分(导出的部分),隐藏的部分是永远无法使用的。
当通过某种语法或api去使用一个模块时,这个过程叫做模块的导入
CommonJS使用exports
导出模块,require
导入模块
具体规范如下:
exports
或require
,该JS文件是一个模块exports
导出,exports
是一个空的对象,你可以为该对象添加任何需要导出的内容require
实现,require
是一个函数,传入模块的路径即可返回该模块导出的整个内容为了实现CommonJS规范,nodejs对模块做出了以下处理
为了保证高效的执行,仅加载必要的模块。nodejs只有执行到require
函数时才会加载并执行模块
为了隐藏模块中的代码,nodejs执行模块时,会将模块中的所有代码放置到一个函数中执行,以保证不污染全局变量。
(function(){ //模块中的代码 })()
为了保证顺利的导出模块内容,nodejs做了以下处理
module.exports = {}
module.exports
即模块的导出值module.exports
后,又声明了一个变量exports = module.exports
(function(module){ module.exports = { }; var exports = module.exports; //模块中的代码 return module.exports; })()
为了避免反复加载同一个模块,nodejs默认开启了模块缓存,如果加载的模块已经被加载过了,则会自动使用之前的导出结果
转载地址:http://afyg.baihongyu.com/