我们知道,node.js是基于commonjs规范进行模块化管理的,模块化是面对复杂的业务场景不可或缺的工具,或许你经常使用它,但却从没有系统的了解过,所以今天我们来聊一聊node.js模块化你所需要知道的一些事儿,一探node.js模块化的面貌。
什么是模块化
编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成若干个独立并且相互依赖的小模块。
使用模块化的好处有:
- 提高代码的复用性
- 提高代码的可维护性
- 可以实现按需加载
模块的分类
Node.js 中根据模块来源的不同,将模块分为了三大类,分别是:
- 内置模块(由官方提供,比如 fs、http、path 等)
- 自定义模块(用户创建的每个 .js 文件都是一个自定义模块)
- 第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户自定义的模块,使用前需下载)
自定义node.js模块
我们已经知道了如何引入一个 Nodejs 模块,但是我们应该如何定义一个 Nodejs 模块呢?在 Nodejs 上下文环境中提供了一个 module 对象和一个 exports 对象,module 代表当前模块,exports 是当前模块的一个属性,代表要导出的一些 API。在 Nodejs 中,一个文件就是一个模块,把方法或者变量作为属性挂载在 exports 对象上即可将其作为模块的一部分进行导出。
// add.js
exports.add = function(a, b) {
return a + b
}
在另一个文件中,我们就可以通过 require 引入之前定义的这个模块:
const { add } = require('./add.js')
add(1, 2) // 结果为 3
模块化规范
Node.js 遵循了 CommonJS 模块化规范,CommonJS 规定了模块的特性和各模块之间如何相互依赖。
CommonJS 规定:
- 每个模块内部,module 变量代表当前模块
- module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口
- 加载某个模块,其实是加载该模块的 module.exports 属性, require() 方法用于加载模块