惠善一的博客:https://huishanyi.club
  模块式开发贯穿着整个NodeJS项目,那么,**模块是什么?**模块相当于一个最小的功能块,在NodeJS项目中,一个JS文件就为一个模块。
  **模块开发有何好处?** 1.维护快稳准:随着项目的进行,代码量增大,导致了后期维护极其困难,而使用模块试开发,在后期出现问题时只需要找到相应的模块进行代码修改即可。2.可复用性高:同一项目不同页面同一功能可以复用模块;不同项目相同功能可以复用模块。
## 文件模块
> 由开发者自己编写的模块(如.js文件、NPM安装到本地的包,包就是拥有一个或多个小模块组成的大模块)。
  创建一个`node-test`文件夹作为模块测试目录,并在`node-test`文件夹下创建`hello.js`与`greet.js`,内容如下。
### hello模块(hello.js)
“`js
function hello(name){
console.log(`Hello ${name} !`) // ES6 & ES5字符串拼接。console.log(‘Hello ‘+name+’ !’)
}
module.exports = hello // 模块.暴露 = hello,module.exports将本模块内容暴露出去,使其他模块可以发现它并且调用它。exports.hello = hello也可以达到同样的效果,只不过它不可以像module.exports一样暴露对象,例如module.exports = {k1: v1, k2: v2}。
“`
### greet模块(greet.js)
“`js
var hello = require(‘./hello’); // 使用Node提供的require方法,以相对路径将hello模块引入,引入时.js后缀可以省略
hello(‘World’); // 控制台输出Hello World !
“`
## 核心模块
> NodeJS 核心模块是指在安装完成Node环境之后便产生的模块。
### Buffer模块
> Buffer 类用让 Node.js 处理二进制数据。
### console模块
> console模块用于提供控制台的标准输出。
### process模块
> process模块是一个全局变量,提供了一些与操作系统相关的简单接口,用来操作或查看相关进程信息。
### fs模块
> fs模块用于操作Node项目目录及文件。
### stream模块
> stream模块是一种抽象的数据结构,使文件具有流动性。
### http模块
> http模块用于搭建 HTTP 服务端和客户端。
### crypto模块
> crypto模块提供了加密、解密、签名、验证等功能。
### util模块
> util模块提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足。
### OS模块
> os 模块提供了一些基本的系统操作函数。
### path模块
> path模块提供了一些用于处理文件路径的小工具。
### url模块
> url模块提供了URL解析和分析工具。
### zlib模块
> zlib模块可以对文件、HTTP请求和响应进行压缩与解压处理。
### events模块
> events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
### Net模块
> Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法.
### DNS模块
> DNS 模块用于解析域名。
### Domain模块
> Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常。