您的位置:首页 > Web前端 > Node.js

Node.js 模块加载机制

2013-09-22 23:40 218 查看
一、模块的类型

1、Node.js的模块可以分为两大类,一类是核心模块,另一类是文件模块。

2、核心模块就是Node.js标准API中提供的模块。核心模块通常编译成了二进制代码,可以直接通过require加载核心模块,例如require('fs')。

3、核心模块拥有最高的加载优先级,换言之如果有模块与其命名冲突,Node.js总是会加载核心模块。

4、文件模块则是存储为单独的文件(或文件夹)的模块,可能是JavaScript代码、JSON或编译好的C/C++代码。在不显式指定文件模块扩展名的时候,Node.js会分别试图加上.js、.json和.node扩展名。.js是JavaScript 代码,.json是JSON格式的文本,.node是编译好的C/C++代码。

5、如下图是Node.js模块的类型,从上到下加载优先级由高到低。



二、文件模块的加载方式

1、文件模块的加载有两种方式,一种是按路径加载,一种是查找node_modules文件夹。

2、按路径加载

如果require参数是一个绝对路径,那么就以绝对路径的方式查找模块名称,例如require(“E:/NodeDemo/module”) 将会按照优先级依次尝试加载E:/NodeDemo/module.js、E:/NodeDemo/module.json、E:/NodeDemo/module.node;如果require参数以“ ./ ”或“ ../ ”开头,那么则以相对路径的方式来查找模块。

3、通过查找node_modules目录加载模块

如果require参数不以“绝对路径”、“ ./ ”或“ ../ ”开头,而该模块又不是核心模块,那么就要通过查找node_modules目录加载模块了。使用npm获取的包通常就是以这种方式加载的。

加入在某个目录下执行npm命令安装了一个模块,会发现在该目录下出现了一个叫做node_modules的目录,比如安装了express模块(npm install express),然后在node_modules目录的外面一层,可以直接使用require('express') 来代替require('./node_modules/express')。

当require遇到一个既不是核心模块,又不是以路径形式表示的模块名称时,会试图在当前目录下的node_modules目录中来查找是不是有这样一个模块。如果没有找到,则会在当前目录的上一层中的node_modules目录中继续查找,反复执行这一过程,直到遇到根目录为止。

三、加载顺序

1、对于使用require(some_module) 时,Node.js的加载顺序如下:

如果some_module为核心模块,则直接加载。
如果some_module是一个绝对路径或者是相对路径,则按路径加载。
通过查找node_modules目录加载模块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: