node.js中模块的分类

  1. 内置模块(http,fs,path等等)
  2. 自定义模块(用户创建的每个.js文件都是自定义模块)
  3. 第三方模块(第三方开发的模块,使用前需要下载)

node.js中加载模块

使用require方法按需加载模块。

  1. 加载内置模块
    1
    const fs = require('fs');
  2. 加载用户自定义模块
    1
    const custom = require('./custom.js');
  3. 加载第三方模块
    1
    const moment = require('moment');

注意:使用require加载其他模块的时候,会执行被加载模块中的代码。

使用require加载用户自定义模块的时候,可以省略.js后缀。

模块作用域

与函数作用域类似,在自定义模块中定义的变量或者方法,只能在当前模块内使用。

好处:

  1. 防止全局作用域变量污染

向外共享模块作用域中的成员

1. module对象

每个.js文件当中都有一个module对象,里面存储了当前模块的所有有关信息。

2. module.exports对象

在自定义模块中,可以使用module.exports对象,将模块内部的成员共享出去。

外界使用require()方法导入。

注意:

使用require()方法导入方法的时候,永远以module.exports指向的对象为准

3. exports对象

为了简化module.exports,node.js提供了一个简写:exports对象,默认情况下exports和module.exports指向同一个对象。最终共享结果,以module.exports为准。

Node.js中的模块化规范

CommonJS规定:

  1. 每个模块内部,module变量代表当前模块
  2. module变量是一个对象,它的exports属性(module.exports)是对外的接口
  3. 架子啊某个模块,其实是加载该模块的module.exports属性,require()用于加载模块