Vue.js+Node.js全栈开发实战
上QQ阅读APP看书,第一时间看更新

4.2 模块加载原理与加载方式

Node.js中的模块可以分为原生模块和文件模块。在Node.js中可以通过require方法导入模块、exports方法导出模块。

提示

本节多用“方法”(Method)一词而非“函数”。

4.2.1 require导入模块

对于原生模块(如http),只需要使用require('http')导入这个模块并将其赋值给一个变量,即可使用这个模块导出的属性、方法(即函数)。

【代码4-1】

对于文件模块,可以使用“./”前缀来指代当前路径,从而使用相对路径来加载模块。加载模块时,可以省略.js扩展名。例如,在同级的文件夹node中有一个名为myModule.js的文件模块,可以这样导入:

const myModule = require('./node/myModule');

在4.1节中利用NPM下载了underscore模块,那么在node_modules文件夹的同级目录可以这样加载:

const underscore = require('./underscore');

这是因为Node.js内部会自动查找加载node_modules文件夹下的模块。

这里有必要了解一下Node.js尝试路径的顺序。例如,某个模块的绝对路径是home/hello/hello.js,在该模块中导入其他模块,写法为require("me/first"),则Node.js会依次尝试使用路径:

/home/hello/node_modules/me/first
/home/node_modules/me/first
node_modules/me/first

4.2.2 exports导出模块

一个模块中的变量和方法只能用于这个模块,如果想要与其他模块共享一些方法、属性等,就可以用exports导出一个对象。这个对象可以包含想要与其他模块共享的方法和属性等。

假设一个模块中有两个想要与其他模块共享的方法,一个用于数组去重,一个用于计算数组之和,可以像下面这样导出:

【代码4-2】

假设将这个模块保存为exports.js,同级目录下通过require使用该模块,代码如下:

【代码4-3】

运行这段代码后,可以在控制台看到输出数组[1, 2, 3]和数字11,说明模块导入成功,如图4.8所示。

图4.8 导入模块