1. 什么是模块化?
模块化是程序员经常碰到的词汇。人人都要求我们写的程序要符合模块化,那到底什么是模块化呢?模块化就这么重要么?
笔者认为,模块化是一种思想,是封装的表现。就像是一个电商系统,用户管理是一个模块,订单管理又是一个模块,模块和模块之间应该遵守高聚合低耦合的要求。又比方我们在Vue中会封装一个一个组件,每个组件都有特定的功能,且可以重复利用,这也是模块化的表现。模块化可以让程序更容易阅读,编写的代码更容易维护,其重要程度毋庸置疑。
那在Node.js中模块化是怎么体现的呢?
在Node.js中,一个文件就是一个模块,我们编写的代码会自动封装在一个模块里,通过exports
或 module.exports
暴露数据给引用的模块使用,在模块中通过require('文件名')
引用其他模块。
2. 模块类型
系统模块
即Node.js自带的模块,如ftp,url...第三方模块
即开发者或者公司开源的模块,放在NPM上,通过安装即可使用自定义模块
开发者可以自己编写模块
3. 主模块
主模块是整个项目的启动模块,主模块对其他所有模块进行调度使用。一个项目只允许有一个主模块。通常命名为:main.js
/ index.js
/ app.js
/ package.json中的main
4. 模块的组成
用户编写的代码会自动生成一个模块,即自动封装在一个函数中,这个函数有5个参数
exports
用来暴露对象,将模块中的数据暴露给引用对象(通过require引入使用),它是module.exports的一个引用,即一个指针require
用来引入模块,通过引入的模块提供的暴露的数据,可以赋值给变量使用。module
模块对象,包含当前模块的所有信息,一般通过module.exports暴露数据,而不用exports__filename
当前模块的文件名__dirname
当前模块所在的目录路径
总结
一个文件就是一个模块,用户编写的代码会自动生成一个模块,而且有5个参数,通过exports可以暴露数据,通过require可以引用模块,一般通过module.exports暴露数据,因为exports只是module.exports的一个引用,指向module.exports指向的内存。