目录一、模块规范二、查找策略原生模块绝对路径、相对路径目录作为模块非原生模块举个例子三、总结一、模块规范 nodejs对Commonjs进行了支持和实现,让我们在开发node的过程中
nodejs
对Commonjs
进行了支持和实现,让我们在开发node
的过程中可以方便的进行模块化开发:
而模块化的核心是导出与导入,在Node
中通过exports
与module.exports
负责对模块中的内容进行导出,通过require
函数导入其他模块(自定义模块、系统模块、第三方库模块)中的内容
require
方法接收一下几种参数的传递:
require
参数较为简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同,如下图:
从上图可以看见,文件模块存在缓存区,寻找模块路径的时候都会优先从缓存中加载已经存在的模块
而像原生模块这些,通过require
方法在解析文件名之后,优先检查模块是否在原生模块列表中,如果在则从原生模块中加载
如果require
绝对路径的文件,则直接查找对应的路径,速度最快
相对路径的模块则相对于当前调用require
的文件去查找
如果按确切的文件名没有找到模块,则 NodeJs
会尝试带上 .js
、.JSON
或 .node
拓展名再加载
默认情况是根据根目录中package.json
文件的main
来指定目录模块,如:
{ "name" : "some-library",
"main" : "main.js" }
如果这是在./some-library node_modules
目录中,则 require('./some-library')
会试图加载 ./some-library/main.js
如果目录里没有 package.json
文件,或者 main
入口不存在或无法解析,则会试图加载目录下的 index.js
或 index.node
文件
在每个文件中都存在module.paths
,表示模块的搜索路径,require
就是根据其来寻找文件
在window
下输出如下:
[ 'c:\nodejs\node_modules','c:\node_modules' ]
可以看出module path
的生成规则为:从当前文件目录开始查找node_modules
目录;然后依次进入父目录,查找父目录下的node_modules
目录,依次迭代,直到根目录下的node_modules
目录
当都找不到的时候,则会从系统NODE_PATH
环境变量查找
如果在/home/ry/projects/foo.js
文件里调用了 require('bar.js')
,则 node.js 会按以下顺序查找:
这使得程序本地化它们的依赖,避免它们产生冲突
通过上面模块的文件查找策略之后,总结下文件查找的优先级:
到此这篇关于Node 文件查找优先级及 Require 方法文件查找策略的文章就介绍到这了,更多相关Node 文件查找内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Node 文件查找优先级及 Require 方法文件查找策略
本文链接: https://www.lsjlt.com/news/168363.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-12
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
2023-05-20
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0