Node.js中的模块化

模块化的相关概念

模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的规则。
例如

  • 使用什么样的语法格式来引用模块
  • 在模块中使用什么语法向外暴露成员

Node.js中根据模块的来源不同,将模块分为3大类分别是:

  • 内置模块(例如node官提供的 fs、http、path模块)
  • 自定义模块(用户自己创建的任意一个js文件都是自定义模块)
  • 第三方模块(由第三方开发出来的模块,并非官方内置模块,也不是用户自定义的文件,使用前需要下载)

Node.js中的模块化_第1张图片
Node.js中的模块化_第2张图片

加载模块

使用require()方法,可以加载内置模块、用户自定义模块、第三方模块。

  • 使用require()方法加载其他模块时,会执行模块中的代码

Node.js中的模块化_第3张图片
例如在07test.js中require()了06m1.js,在06m1.js中写了console.log(‘加载了06这个用户自定义模块’),运行07test时控制台便将这句话打印出来了。并且后面还有一个空对象{ },这个空对象是自定义模块中的module对象,并且每个自定义模块都有一个module对象
Node.js中的模块化_第4张图片

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

module对象

在每个.js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息,打印如下:
Node.js中的模块化_第5张图片

module.exports对象

在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用,外界用require()方法导入自定义模块时,得到的就是module.exports所指向的对象。如下面的代码所示:
Node.js中的模块化_第6张图片
以下有几种容易出错的情况,在定义的js文件中 利用 module.exports.属性 添加的属性会默认放到module.exports对象内部,如果将一个新对象整体重新赋值给module.exports对象 就相当于给module.exports重新创建了一个新对象 利用module.exports.属性赋给此对象的属性将不复存在。
Node.js中的模块化_第7张图片

exports对象

同时Node还提供了exports对象,默认情况下在一个js文件中,exports 对象和module.exports对象指向的是同一个对象。当最终共享的结果是以module.exports指向的对象为准。
Node.js中的模块化_第8张图片
案例一:
module.exports.username = ‘zs’
exports对象重新整体赋值了一个新对象,最终向外共享的成员只有module.exports.username = 'zs’提供的属性
Node.js中的模块化_第9张图片
案例二:
exports对象 和 module.exports对象 都利用 .属性 的方法赋值,最后向外共享的成员是两者一共的属性。
Node.js中的模块化_第10张图片
案例三:
Node.js中的模块化_第11张图片
案例总结
为了防止混乱,建议大家不要在同一个模块中同时使用exports和module.exports
Node.js中的模块化_第12张图片

node中的模块化规范

node.js遵循了CommonJS模块化规范,CommonJS规定了模块的特性以及模块之间如何相互依赖

CommonJS规定

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

你可能感兴趣的:(nodeJS知识,node.js,javascript,前端)