node.js中模块的分类
- 内置模块(http,fs,path等等)
- 自定义模块(用户创建的每个.js文件都是自定义模块)
- 第三方模块(第三方开发的模块,使用前需要下载)
node.js中加载模块
使用require方法按需加载模块。
- 加载内置模块
1
const fs = require('fs');
- 加载用户自定义模块
1
const custom = require('./custom.js');
- 加载第三方模块
1
const moment = require('moment');
注意:使用require加载其他模块的时候,会执行被加载模块中的代码。
使用require加载用户自定义模块的时候,可以省略.js后缀。
模块作用域
与函数作用域类似,在自定义模块中定义的变量或者方法,只能在当前模块内使用。
好处:
- 防止全局作用域变量污染
向外共享模块作用域中的成员
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规定:
- 每个模块内部,module变量代表当前模块
- module变量是一个对象,它的exports属性(module.exports)是对外的接口
- 架子啊某个模块,其实是加载该模块的module.exports属性,require()用于加载模块