上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 导入模块