node模块加载机制

本文详细介绍了Node.js中模块的加载方式,包括内置模块、相对路径模块和绝对路径模块的不同加载方式,以及如何通过require方法加载核心模块和第三方模块。

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

node模块加载分为三类

A.内置模块  require('http')或require('mymodule') 不已 / 、./、../、开头的模块

B.相对路径模块 require('./todo.js') 或 require('../node/demo/module/user.js') 相对于调用require方法的文件

C.绝对路径模块 require('/user/node/demo/module.js')


内置模块要么是核心模块,要么是node_modules文件夹中的模块

核心模块总是优先加载。例如,require('http') 总是返回内置的 HTTP 模块,即使该名称的文件存在;

如果没有找到确切的文件,Node 将尝试给所需的文件名​​添加 .js 后缀再加载,然后再尝试 .node。
*.js 文件被视为 JavaScript 文本文件,而 *.node 文件被视为已编译的插件模块

如果以相对路径或绝对路径的方式加载模块未找到对应的文件,但找到对应的文件夹时,node会尝试加载该文件夹下的package.json文件,如果未找到package.json文件,node还会尝试加载index.js,或者index.node

package.json文件格式为:

{ "name" : "some-library", "main" : "./lib/some-library.js" } node会加载该文件中的main模块



如果调用 require() 的文件已经在一个 node_modules 层级里,那么最顶层的 node_modules 文件夹将被视为搜索树的根。

例如,如果在文件 '/home/ry/projects/foo/node_modules/bar/node_modules/baz/quux.js' 中调用require('asdf.js'),那么 Node 将搜索下列位置:

/home/ry/projects/foo/node_modules/bar/node_modules/baz/node_modules/asdf.js
/home/ry/projects/foo/node_modules/bar/node_modules/asdf.js
/home/ry/projects/foo/node_modules/asdf.js


如果在文件 '/home/ry/projects/foo.js' 中调用 require('bar.js'),那么 Node 将在下列位置查找,顺序如下:

/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js


一旦模块通过require方法被加载进node中,该模块便会被在全局环境中保持,但再次通过require方法加载该模块时,其实加载的是全局环境中模块


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值