require或者import的时候,不加相对路径,加载模块的顺序是什么
当在 require 中不加相对路径时,即只指定模块名而不指定具体路径,Node.js 会按照以下顺序来加载模块:
1、核心模块(Core Modules):Node.js 内置的模块,如 fs、http 等。可以直接通过模块名引用,无需指定路径。
2、文件模块(File Modules):自定义的模块文件,可以是 JavaScript 文件(.js)或 JSON 文件(.json)。在 require 中指定相对或绝对路径引用。
3、文件夹模块(Folder Modules):当在 require 中指定一个文件夹路径时,Node.js 将查找该文件夹下的 index.js、index.json 或 index.node 文件作为模块入口。
4、第三方模块(Third-party Modules):通过 npm 安装的第三方模块。在 require 中指定模块名引用,Node.js 将在项目的 node_modules 目录中查找并加载对应模块。
问题来了?如果第三方模块和自定义模块名称重复,那么模块会优先加载哪个?
如果第三方模块和自定义模块名称重复,Node.js 会优先加载项目目录下的自定义模块,而不会加载第三方模块。这是因为在查找模块时,Node.js 会按照模块的查找顺序逐个尝试加载,先找到的模块会被加载,后面的同名模块将被忽略。
因此:
如果你希望明确加载第三方模块而不是自定义模块,可以在模块名称前加上路径分隔符 ./ 或 /,或者使用相对路径或绝对路径指定模块的位置,以避免与自定义模块产生冲突。