每日灵魂一问-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是啥