Node.js(二)-模块机制

再次阅读《深入浅出Node.js》的笔记系列,内容主要摘自书中

CommonJS

CommonJS规范加载模块是同步的。根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的。
CommonJS规定,每个文件的对外接口是module.exports对象。这个对象的所有属性和方法,都可以被其他文件导入。

CommonJS模块的特点如下:

  • 所有代码都运行在模块作用域,不会污染全局作用域
  • 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
  • 模块加载的顺序,按照其在代码中出现的顺序

module

Node内部提供一个Module构建函数。所有模块都是Module的实例。每个模块内部,都有一个module对象,代表当前模块,它的属性包括(module.id,module.filename,module.loaded,module.parent,module.children,module.exports)

  • module.exports && exports
    module.exports属性表示当前模块对外输出的接口,为了方便,Node为每个模块提供一个exports变量,指向module.exports。等同于
    var exports = module.exports;
    exports对象是通过形参方式传入的,直接赋值形参会改变形参的引用,但并不能改变作用域外的值。

思维脑图

node