2020.11.14
CommonJS规范
Node应用由模块组成,采用CommonJS模板规范
每个文件就是一个模块,有自己的作用域。在一个文件里定义的数量、函数、类,都是私有的,对其他文件不可见
用 global 对象定义的属性可以在多个文件分享变量。
CommonJS规范规定,在每个模块内部,module变量代表当前模块,这个变量是一个对象,exports就是一个对外的接口,加载模块的时候其实也就是加载这个模块的属性。
特点:
- 所有的代码都运行在模块的作用域,不会污染全局作用域
- 模块可以被多次加载,但是只会在第一次加载的时候运行,然后结果就被缓存了,再次加载就是读取缓存中的内容了
- 模块加载的顺序,是按照其在代码中的出现的顺序加载的
关于module对象
就是node内部提供的一个Module构建函数,所有模块都是Module的实例
module.id 模块的识别符,通常是带有绝对路径的模块文件名。
module.filename 模块的文件名,带有绝对路径。
module.loaded 返回一个布尔值,表示模块是否已经完成加载。
module.parent 返回一个对象,表示调用该模块的模块。
module.children 返回一个数组,表示该模块要用到的其他模块。
module.exports 表示模块对外输出的值。
module.exports
表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量
exports变量
每个模块都会有一个exports变量,指向module.exports。
- CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
- AMD规范则是非同步加载模块,允许指定回调函数。
require命令
请求module.exports抛出来的对象,也就是说用于接收对应的对象。require的模块参数命名需要符合小驼峰命名的字符串或者是以 . … 开头得相对路径,一般来说使用相对路径
- 加载文件时,后缀名默认为 .js ,
- 其中/开头表示的时绝对路径, ./ 开头的就是相对路径
- 如果参数字符串不以“./“或”/“开头,则表示加载的是一个默认提供的核心模块
目录加载规则
在packjson文件中,会有入口文件,也就是说文件就是从这个地方进去的
大致CommonJS的内容就是这些了,也算是一些比较常用的吧