Node之CommonJS,为什么模块该这么写

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的内容就是这些了,也算是一些比较常用的吧

原文地址:https://www.cnblogs.com/Indomite/p/14195242.html