Node.js——模块加载原理与加载方式

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

1、require导入模块

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

const http = require('http');
http.createServer {
	
}

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

const myMoudle = require('./node/myMoudle‘);

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

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

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

Node.js尝试的路径顺序。例如,某个模块的绝对路径是home/hello/hello.js,在该模块中导入其他模块,写法为requier(“me/file”),则Node.js会依次尝试是使用的路径如下所示:

/home/hello/node_moudles/me/first
/home/node_moudles/me/first
/node_moudles/me/first

2、exports导出模块

一个模块中的变量和方法只能用于这个模块,如果想要与其他模块共享一些方法、属性等,就可以用exports导出一个对象。这个对象可以包含想要与其他模块共享的方法和属性等。
相关例子如下:
新建一个exports.js文件,其相关的内容如下所示:

const util = {
	noRepeat: function(arr) {
		return arr.filter(function(ele, index) {
			return arr.indexOf(ele) == index;
		});
	},
	add: function(arr) {
		return arr.reduce(function(ele1, ele2) {
			return ele1 + ele2;
		});
	}
};

module.exports = util;

在同级目录下通过require使用这个模块,相关代码为:

const arrFn = require('./exports');
const arr = [1,2,3,3,2];
let noRepeatArr = arrFn.noRepeat(arr);
let num = arrFn.add(arr);

console.log(noRepeatArr);
console.log(num);

此时就可以引入到exports.js文件中所提供的方法。同时,如果在exports.js文件中不加入module.exports = util;则通过require也不能使用exports.js文件中所提供的方法,因为exports.js中的方法并没有进行相关的共享。

你可能感兴趣的:(后端,nodejs)