一、Node.js常见模块

在node中,模块有不同的表现形式,其使用方式也有差异。
基本上,我们可以将node.js中的模块分为两种:核心模块(系统模块)、用户模块

1.核心模块

核心模块,也叫系统模块,是node.js自带,只要安装了node.js,它就已经具备了这些模块。是可以直接引入并使用的。

系统模块在源代码中已经编译了,以二进制文件存在,模块引入时可以直接加到内存。
常见的核心模块有http、fs、path、url。

2.用户模块

所有非核心模块,都属于用户模块。
实际上,用户模块,有可以分为两种:第三方模块;自定义模块

二、载入模块

Node.js默认是使用CommonJS规范,就包含两个东西:

  • require方法,用于载入模块
  • module.exports对象,用于导出模块

在node.js中,要载入模块,必须要使用requrie方法。

在使用require的时候,需要分成如下三种情况来讨论:核心模块;第三方模块;自定义模块

1.核心模块

这是最简单的,因为核心模块是node自带。只需要传入模块的名称即可。

//引入http核心模块
const http = require("http");
console.log(http);

//引入fs模块
const fs = require("fs");
console.log(fs);
注意,常量的名称可以是随意的,但是为了语义,尽量和模块名称保持一致。

不能再加任何和路径相关的写法,否则就出错了。

2.第三方模块

属于用户模块,是非核心。分两步完成,

第一步:下载相关模块,例如下载lodash模块

node_modules是通用的么_自定义

第二步:引入使用,如下:

node_modules是通用的么_自定义_02

3.自定义模块

需要分为两步:
第一步,定义一个模块
第二步,引入自定义模块

定义一个模块

node_modules是通用的么_node.js_03

第二步,使用require引入,

node_modules是通用的么_后缀_04


注意:

  • 对于自定义模块,必须要使用相对路径来引入,必须是使用./或者…/开头。否则报错。
  • 文件的后缀名是可以省略的,包括js后缀和json后缀。
  • 一旦省略了后缀,引入机制有些变化,依照 目录 ->.js-> .json-> .node 的顺序进行查找,如果所有模块路径都找不到该文件,则抛出异常。
  • 如果require的是文件夹名称,默认会引入该文件夹下的文件。

三、自定义模块实现

1.使用module.exports导出模块

在开发中,会经常需要使用自定义模块。

它的整体的过程如下:

node_modules是通用的么_node.js_05

换言之,module.exports 是一个全局变量。可以直接在js文件中对其赋值。
在使用require方法引入一个模块的时候,返回的就是module.exports。
module.exports默认是空对象。

在导出模块的时候,就可以直接给module.exports赋值即可

node_modules是通用的么_自定义_06


再比如

node_modules是通用的么_node_modules是通用的么_07

2.exports对象

在CommonJS中,导出模块是通过module.exports来实现的。
在CommonJS中,使用requrie方法,得到的结果就是module.exports。
在CommonJS中,给module.exports起了一个别名—exports。

所以,在有些地方,它是使用exports来导出的。如下:

node_modules是通用的么_nodejs_08