Node.js 模块加载机制

本文介绍了Node.js中的两种模块类型:核心模块与文件模块,并详细解释了它们的加载方式及优先级。核心模块由Node.js内置提供,而文件模块则通过路径加载或在node_modules目录中查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、模块的类型

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目录加载模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值