CommonJS 中的 require 是如何加载、执行并缓存模块的?
简答题困难1029 次浏览
参考答案与解析
# 核心结论
require 不是简单地把另一个文件的文本复制进当前文件。以 Node.js 的 CommonJS 实现为例,它大致经历模块标识解析、文件定位、缓存查询、模块对象创建、源码加载与包装、函数执行、缓存结果返回等阶段。同一个规范化文件通常只执行一次,后续加载直接取得缓存中的 exports。具体内部函数会随运行时版本调整,面试时应说明机制,而不应把某个版本的私有源码当成永久规范。
调用 require('./counter') 时,运行时首先根据当前模块所在目录解析相对路径,并按文件、扩展名或目录入口规则寻找目标。解析结果通常是规范化后的绝对文件名,它也是缓存键的重要依据。找到模块后会先检查
