news 2026/4/3 4:32:07

NodeJS模块加载机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NodeJS模块加载机制

官方文档:https://www.nodeapp.cn/modules.html#modules_modules

1、在 Node.js 模块系统中,每个文件都被视为独立的模块。
2、当 Node.js 直接运行一个文件时,require.main 会被设为它的 module。 这意味着可以通过 require.main === module 来判断一个文件是否被直接运行。

1 require函数

用来加载目标js库,并返回目标js库公开的属性成员函数/变量。

伪代码

functionrequire(/* ... */){constmodule={exports:{}};((module,exports)=>{// 模块代码在这。在这个例子中,定义了一个函数。functionsomeFunc(){}exports=someFunc;// 此时,exports 不再是一个 module.exports 的快捷方式,// 且这个模块依然导出一个空的默认对象。module.exports=someFunc;// 此时,该模块导出 someFunc,而不是默认对象。})(module,module.exports);returnmodule.exports;}

加载顺序

1、内置模块(fs、http…)
优先级最高,直接返回 native 绑定,即使本地装了同名包也会被忽略 。
2、相对路径文件模块(./foo、…/lib/bar)
会把文件当成一个“包”,按 .js → .json → .node 顺序补全扩展名 。
3、目录模块(require(‘./dir’))
先看 dir/package.json 的 main 字段 → 没有就退回到 dir/index.js 。
4、第三方包(require(‘lodash’))
触发“node_modules 向上漂移”算法:
当前文件父级 → 再父级 → … → 根目录,直到找到第一个 node_modules/lodash 。

2 module对象


在每个模块中,module 的自由变量是一个指向表示当前模块的对象的引用。 为了方便,module.exports 也可以通过全局模块的 exports 对象访问。 module 实际上不是全局的,而是每个模块本地的。

参考文档

浅析nodejs的require函数分别加载自定义模块和npm开源库的不同加载原理、NodeJS模块加载机制require和module的理解

Node.js的模块解析机制

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/31 20:56:22

WAN2.2文生视频GPU利用率提升60%:显存优化与batch size调优实战教程

WAN2.2文生视频GPU利用率提升60%:显存优化与batch size调优实战教程 1. 为什么你的WAN2.2跑得慢?真实瓶颈在这里 你是不是也遇到过这种情况:明明用的是4090或A100显卡,运行WAN2.2文生视频工作流时,GPU利用率却长期卡…

作者头像 李华
网站建设 2026/4/1 22:51:11

自定义词典加持,MGeo更懂行业术语

自定义词典加持,MGeo更懂行业术语 地址匹配不是简单的字符串比对,而是地理语义的深度理解。当你输入“浙大紫金港校区启真湖畔”和“浙江大学启真湖”,传统正则或编辑距离算法可能直接判为不匹配——毕竟“浙大”和“浙江大学”字面差异不小…

作者头像 李华
网站建设 2026/3/31 13:31:46

从部署到应用,FSMN VAD一站式语音处理方案

从部署到应用,FSMN VAD一站式语音处理方案 1. 什么是FSMN VAD?为什么它值得你花5分钟了解 1.1 一个被低估的“语音守门员” 你有没有遇到过这样的问题: 会议录音里夹杂着翻纸声、键盘敲击、空调嗡鸣,识别系统却把所有声音都当成了…

作者头像 李华
网站建设 2026/3/13 23:16:24

Qwen3-32B开源镜像优势:Clawdbot Web网关支持流式输出与中断续写

Qwen3-32B开源镜像优势:Clawdbot Web网关支持流式输出与中断续写 1. 为什么这个组合值得你花5分钟了解 你有没有遇到过这样的情况:部署一个大模型,界面能打开,但输入问题后要等十几秒才出第一行字?或者正聊到一半&am…

作者头像 李华
网站建设 2026/3/13 23:11:18

Nano-Banana Studio保姆级教学:Streamlit界面实时预览与下载技巧

Nano-Banana Studio保姆级教学:Streamlit界面实时预览与下载技巧 1. 这不是普通AI绘图工具,是你的产品视觉工程师 你有没有遇到过这些场景? 设计师花3小时手动排布一件夹克的纽扣、拉链、内衬结构,只为做一张干净的技术示意图&a…

作者头像 李华
网站建设 2026/3/14 23:48:25

3步解锁高效资源获取:猫抓Cat-Catch效率工具全攻略

3步解锁高效资源获取:猫抓Cat-Catch效率工具全攻略 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾因无法下载网页视频而困扰?面对加密流媒体、分段传输的媒体文件&am…

作者头像 李华