MST

星途 面试题库

面试题:Node.js 文件模块与核心模块在加载机制上的区别

请阐述Node.js中文件模块与核心模块在加载机制方面有哪些不同点。
30.2万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  • 文件模块
    • 查找路径:相对路径查找,基于当前文件所在目录,若以./../开头,Node.js会从当前模块的目录开始查找。例如在/project/src/a.js中引入./b.js,就会在/project/src目录找b.js
    • 缓存:文件模块在第一次加载后会被缓存,再次引入时直接从缓存中获取。但缓存是基于文件路径的,若通过不同路径引入同一文件模块(实际指向同一物理文件),会被视为不同模块进行加载。
    • 加载过程:先根据文件扩展名确定加载方式,.js文件通过fs.readFileSync读取文件内容并使用vm.runInThisContext编译执行;.json文件通过fs.readFileSync读取内容后用JSON.parse解析;其他扩展名或无扩展名会先当作.js文件处理。
  • 核心模块
    • 查找路径:Node.js在编译时就已经确定核心模块的存放位置,加载时直接从核心模块的内置路径查找,无需像文件模块那样基于相对路径查找。例如http模块,无论在项目什么位置引入,都直接从核心模块位置加载。
    • 缓存:核心模块也有缓存机制,并且在Node.js启动时部分核心模块就已经被加载并缓存,后续引入直接从缓存获取,效率更高。
    • 加载过程:核心模块是由C++编写并编译进Node.js二进制文件中的,加载时直接执行编译好的代码,无需像文件模块那样进行文件读取和JavaScript代码编译等操作,所以加载速度更快。