每日灵魂一问-Nodejs文件查找的优先级&Require 方法的文件查找策略?

Posted NANA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日灵魂一问-Nodejs文件查找的优先级&Require 方法的文件查找策略?相关的知识,希望对你有一定的参考价值。

模块规范

在Node中每一个js文件都是一个单独的模块

模块中包括CommonJS规范的核心变量:
导出:exports、module.exports
导入:require

通过上述变量进行模块化开发

查找顺序(优先级):

1.1 文件模块: 从文件模块缓存区中查找,有则返回
1.2 原生模块: 原生模块(fs , http)缓存=》原生模块=》
1.3 文件加载: 相对路径=》绝对路径=》非原生模块

  • 如果是相对路径 ./开头,则从当前require文件相对位置找
  • 如果是绝对路径 / 开头,则从根目录找
  • 如果文件没有携带后缀,先从js、json、node按顺序查找
  • 如果是目录,则根据 package.json的main属性值决定目录下入口文件,默认情况为 index.js
  • 如果文件为第三方模块,则会引入 node_modules 文件向上级递归查找

查找策略

1.原生模块:http、fs、path等 require后优先检查模块是否在原生模块列表中
2.相对路径的文件模块:./mod或../mod
如果按确切的文件名没有找到模块,则 NodeJs 会尝试带上 .js、.json或 .node拓展名再加载
3.绝对路径的文件模块:/pathtomodule/mod 速度最快
4.目录作为模块:./dirname 会.js .json /main/index.js /main/index.node
5.非原生模块的文件模块:mod
查找顺序当前文件夹的node_modules下找 上层目录下的node_modules下找 上上层目录下的node_modules下找 上上上层目录下的node_modules下找 .......

以上是关于每日灵魂一问-Nodejs文件查找的优先级&Require 方法的文件查找策略?的主要内容,如果未能解决你的问题,请参考以下文章

node.js每日灵魂一问- node.js的fs模块&常用方法

每日灵魂一问-__proto__&prototype&constructor是啥

每日灵魂一问-如何实现文件上传?

每日灵魂一问-对Node 中的 Stream 的理解?应用场景?

每日灵魂一问- Node 中 Buffer 的理解

每日灵魂一问-关于react