面试题答案
一键面试使用相对路径引入
在app.js
中可以这样引入:
const Util = require('./lib/subdir/util.js');
- 模块路径解析优先级:相对路径引入方式,Node.js会根据当前文件的位置,按照指定的相对路径去查找模块。在这种情况下,会直接从当前
app.js
所在目录下的lib/subdir
中寻找util.js
,优先级较高,只要路径正确就能准确找到模块。 - 优点:
- 路径明确,与项目的目录结构紧密相关,直观易懂。即使项目的整体目录结构发生变化,只要相对关系不变,引入依然有效。
- 不会受到
NODE_PATH
环境变量等外部配置的影响,模块的查找相对稳定。
- 缺点:
- 如果项目目录结构复杂,相对路径可能会变得很长且难以维护,例如在多层嵌套目录中,相对路径会显得冗长。
- 不利于代码的复用,如果需要在不同位置复用模块,相对路径可能需要根据位置不同而修改。
使用NODE_PATH环境变量引入
假设NODE_PATH
已正确设置指向lib
文件夹,在app.js
中可以这样引入:
const Util = require('subdir/util.js');
- 模块路径解析优先级:当使用
NODE_PATH
引入模块时,Node.js会在NODE_PATH
指定的目录中查找模块。其优先级低于相对路径引入,如果存在同名模块,相对路径引入的模块会优先被加载。只有在相对路径找不到模块时,才会去NODE_PATH
指定的目录查找。 - 优点:
- 可以简化模块引入路径,特别是在项目目录结构复杂时,使用
NODE_PATH
可以避免冗长的相对路径。 - 方便代码复用,不同位置引入模块时路径一致,无需根据不同位置修改相对路径。
- 可以简化模块引入路径,特别是在项目目录结构复杂时,使用
- 缺点:
- 依赖于
NODE_PATH
环境变量的配置,如果配置不正确或在不同环境中配置不一致,可能导致模块引入失败。 - 不够直观,模块的实际位置与引入路径没有直接关联,增加了理解代码的难度。
- 由于优先级较低,可能会出现同名模块被相对路径引入的模块覆盖的情况,导致预期外的行为。
- 依赖于