脑梗有什么前兆| 15年什么婚| 算力是什么| 嘴唇上长疱疹用什么药| 性功能障碍吃什么药| 特应性皮炎是什么病| 双龙戏珠是什么意思| 舌下腺囊肿挂什么科| 荨麻疹是什么引起的| 转氨酶和转移酶有什么区别| 双侧卵巢多卵泡是什么意思| 5月7日是什么星座| 牛顿三大定律是什么| 疏风解表的意思是什么| 生长激素分泌的高峰期是什么时候| 梦见朋友是什么意思| 为什么会有鼻屎| 家里飞蛾多是什么原因| 柝什么意思| 1969年属什么生肖| 早上起来头晕是什么原因| 立夏节吃什么| 生理盐水敷脸有什么效果| c2m模式是什么意思| 后循环缺血吃什么药| hcg是什么意思| otc什么意思| 缘起缘灭是什么意思| 腮腺炎吃什么药| 婴儿坐飞机需要什么证件| raf是什么意思| 乳头痒是怎么回事是什么原因| 什么是自由基| 狗尾续貂什么意思| 咳嗽胸口疼是什么原因| 张牙舞爪的张是什么意思| 铁窗泪什么意思| 419是什么意思| 白藜芦醇是什么东西| 什么菜可以隔夜吃| 头上长了个包挂什么科| 孩子上火了吃什么降火最快| 垂体瘤挂什么科| 白羊座和什么星座最配| 牙痛用什么药止痛快| 蜜蜂吃什么食物| 马赛克什么意思| 什么的莲蓬| 烫伤忌口不能吃什么| 专注力是什么意思| 乌鱼是什么鱼| 膝盖凉是什么原因| 压力过大会有什么症状| 神经性皮炎用什么药膏| 高钾血症是什么原因引起的| 月经前长痘痘是什么原因| 咿呀咿呀哟是什么歌| 久坐脚肿是什么原因| 黄芪最佳搭配是什么| 火花塞坏了有什么症状| 香蕉和什么一起吃能减肥| 喉咙不舒服看什么科| 格格不入什么意思| 打嗝不停吃什么药| 自言自语什么意思| 滥情什么意思| ipa啤酒是指什么| 萎缩性胃炎能吃什么水果| mj是什么意思| 保护眼睛用什么眼药水| 冷沉淀是什么| 为什么总是想睡觉| 脚底发黄是什么原因| 胃疼吃什么食物最养胃| 宫颈出血是什么症状| 脚裂口子是什么原因| 人绒毛膜促性腺激素是查什么的| 什么样的人容易得抑郁症| 胃穿孔是什么原因引起的| 旻字五行属什么| 什么病不能吃鲤鱼| 不禁是什么意思| 铁树开花什么意思| 高压氧是什么| 乙肝病毒表面抗体高是什么意思| 氨咖黄敏胶囊治什么| 龙蛇混杂是什么生肖| 教学相长是什么意思| 冥冥之中是什么意思| 肌酐是检查什么的| 乌龟和鳖有什么区别| 结婚13年是什么婚| 旅游穿什么鞋最舒服| ab型血和b型血生的孩子是什么血型| 吃木瓜有什么好处| 鹿晗的原名是什么| 肌酐高吃什么药好| 内分泌失调是什么原因| 强痛定又叫什么| 易栓症是什么病| 腊肠炒什么菜好吃| 荔枝和什么不能一起吃| 饭后放屁多是什么原因| 学生吃什么补脑子增强记忆力最快| 梦见骨灰盒是什么征兆| 大人有大量是什么意思| 咖啡soe是什么意思| osd是什么意思| 六指是什么原因导致的| 痛风能吃什么菜谱大全| ss是什么意思| 腺样体增生是什么意思| 肠手术后吃什么恢复快| 什么是莱赛尔纤维| 背靠背什么意思| 廿二是什么意思| 磨砂皮是什么皮| 津津有味的意思是什么| 当归和党参有什么区别| 早上六七点是什么时辰| ppt是什么意思| 卵黄囊是什么| 孩子气是什么意思| 手汗脚汗多是什么原因| 指甲竖纹是什么原因| 海尔洗衣机e3是什么故障| 11五行属什么| 什么是宦官| 钻牛角尖什么意思| 为什么家里不能放假花| 什么东西放进去是硬的拿出来是软的| 性冷淡是什么意思| 焱字五行属什么| lpn什么意思| 月季花是什么颜色的| 采耳是什么意思| 六月份是什么季节| 什么天山| 青筋暴起是什么原因| 肠瘘是什么意思| 脑梗能吃什么水果| copd是什么意思| 浅粉色配什么颜色好看| 热狗为什么叫热狗| 金与什么相生相克| 现役是什么意思| 什么情况会胎停| 甲状腺有什么作用| 肾阳虚有什么症状男性| 吃什么菜减肥最快| 三湖慈鲷可以和什么鱼混养| fdp偏高是什么原因| 7月6日什么星座| 吃什么对肝脏有好处能养肝| 肝有什么功能| 大姨妈是什么意思| 坐围和臀围有什么区别| 肝内小钙化灶是什么意思| 暂告一段落是什么意思| 低级别上皮内瘤变是什么意思| 血糖高适合吃什么蔬菜| 眼睛发黄什么原因| 湿疹是什么引起的| 肝硬化挂什么科| 烧裆是什么原因| 天庭的动物是什么生肖| 一天从早到晚叫什么日| 肚子疼吃什么药最有效| 11月27号什么星座| 什么叫风湿| 一直打哈欠是什么原因| 六月初五是什么星座| 京东什么时候有活动| 12月4日是什么日子| 十一点是什么时辰| 脖子上有结节挂什么科| 小囊肿是什么病严重吗| 贝加台念什么| 小跟班是什么意思| 吃饭后胃疼是什么原因| 寒咳吃什么药| 义务兵是什么意思| 百合什么时候开花| 什么叫散光| 普洱茶适合什么季节喝| 北京为什么叫四九城| 中叶是什么意思| 佐匹克隆是什么药| 梦见结婚是什么意思| 栋字五行属什么| 40岁男人学什么乐器好| 红色的对比色是什么颜色| 同房疼痛什么原因| 正常白带是什么样子| 女性大腿酸痛什么原因| 为什么老是出汗| 一朝一夕是什么意思| 抽筋什么原因| 为什么在| 1987年属什么生肖| 17号来月经什么时候是排卵期| 什么品牌的空气炸锅好| 更的部首是什么| 什么是黑色素瘤| 诱导是什么意思| 新疆以前叫什么| 吃什么能补充雌激素| 抑郁症是什么症状| 正月初一是什么节日| 口腔起血泡是什么原因| 正月二十九是什么星座| 早孕反应什么时候开始| 舌头有裂纹是什么病| 信保是什么| 生黄瓜吃了有什么好处| 声音嘶哑吃什么药| 龙眼是什么季节的水果| 药引是什么意思| 分分钟都妙不可言是什么歌| 什么车子寸步难行脑筋急转弯| 干净的反义词是什么| 肺部有空洞是什么病症| 大陆对什么| 出山是什么意思| 大便很黄是什么原因| 运六月有什么说法| 真菌感染什么症状| 头部出汗多是什么原因| 玉兰油属于什么档次| 怀孕为什么会流褐色分泌物| 额头有痣代表什么| 双子座是什么象星座| 湿气重看中医挂什么科| 胸闷气短咳嗽是什么原因引起的| 梦见牙齿掉了是什么征兆| 海棠花的花语是什么| 颈椎病睡什么枕头最好| 梦见家被偷了什么预兆| 两性是什么意思| 尿频尿急尿不尽吃什么药效果最好| 梦见家里着火了是什么征兆| g代表什么| 吃什么助于长高| ahc是韩国什么档次| 四季春茶是什么茶| 十一月三十是什么星座| 惠什么意思| 吃什么药不能喝酒| 土地出让金是什么意思| hrv是什么病毒| 打嗝是什么毛病| lh是什么意思啊| 下巴长闭口是什么原因| 饺子有什么馅| 闲的蛋疼是什么意思| 吃什么食物可以减肥| 雪媚娘是什么| 小肠气挂什么科| 母胎solo是什么意思| 枸杞子和什么泡水喝补肾壮阳| 奇经八脉指的是什么| 经期头疼吃什么药效果最好| 早泄有什么办法| 单宁是什么意思| 百度

nodejs中 require 方法的加载规则

require参数类型

  • http、fs、path等,原生模块
  • ?./mod或../mod,相对路径的文件模块
  • /pathtomodule/mod,绝对路径的文件模块
  • mod,非原生模块的文件模块
百度 该年度报告内容丰富,图文并茂,尤其是28个附录表格详尽收录了2014年度国家社科基金项目课题指南、各类项目立项名单和结项名单、《成果文库》《成果要报》目录以及近年出版的部分项目成果目录、在顶级期刊发表的部分论文目录等,并附全书光盘,具有重要的资料价值和研究参考价值。

在进入路径查找之前有必要描述一下module path这个Node.js中的概念。对于每一个被加载的文件模块,创建这个模块对象的时候,这个模块便会有一个paths属性,其值根据当前文件的路径计算得到。Node.js在编译js文件的过程中实际完成的步骤有对js文件内容进行头尾包装。以app.js为例,我们将其放在任意一个文件夹中,包装之后的app.js将会变成以下形式:

(function (exports, require, module, __filename, __dirname) {
    console.log(module.paths);
});

在app.js中输入如下内容:

console.log(module.paths);

 执行node module app.js命令,将得到以下的输出结果:

[ '/home/jackson/research/node_modules', 
'/home/jackson/node_modules', 
'/home/node_modules', 
'/node_modules' ]

Windows下:

[ 'c:\\nodejs\\node_modules', 
'c:\\node_modules' ]

 可以看出module path的生成规则为:从当前文件目录开始查找node_modules目录;然后依次进入父目录,查找父目录下的node_modules目录;依次迭代,直到根目录下的node_modules目录。

除此之外还有一个全局module path,是当前node执行文件的相对目录(../../lib/node)。如果在环境变量中设置了HOME目录和NODE_PATH目录的话,整个路径还包含NODE_PATH和HOME目录下的.node_libraries与.node_modules。其最终值大致如下:

[NODE_PATH,HOME/.node_modules,HOME/.node_libraries,execPath/../../lib/node]

require方法中的文件查找策略(指内置模块和第三方模块):

1、从module path数组中取出第一个目录作为查找基准。 

2、直接从目录中查找该文件,如果存在,则结束查找。如果不存在,则进行下一条查找。 

3、尝试添加.js、.json、.node后缀后查找,如果存在文件,则结束查找。如果不存在,则进行下一条。

4、尝试将require的参数作为一个包来进行查找,读取目录下的package.json文件,取得main参数指定的文件。 

5、尝试查找该文件,如果存在,则结束查找。如果不存在,则进行第3条查找。 

6、如果继续失败,则取出module path数组中的下一个目录作为基准查找,循环第1至5个步骤。 

7、如果继续失败,循环第1至6个步骤,直到module path中的最后一个值。 

8、如果仍然失败,则抛出异常。

文件查找流程:

由于 Node.js 中存在 4 类模块(原生模块和3种文件模块),尽管 require 方法极其简单,但是内部的加载却是十分复杂的,其加载优先级也各自不同。如下图所示:

?

一、优先从文件模块缓存中加载

尽管原生模块与文件模块的优先级不同,但是都会优先从文件模块的缓存中加载已经存在的模块。

二、原生模块

原生模块的优先级仅次于文件模块缓存的优先级。require 方法在解析文件名之后,优先检查模块是否在原生模块列表中。

在实际开发过程中,如果你的文件和核心库文件同名,加载过程中是会直接忽略你的项目文件。

例如在server下有config.json,require("config")。

require具体的加载过程是:

(1)核心库中如果有config.js 会直接加载 忽略你的文件。

(2)如果没有会检查你的项目中是否有这个.js文件。

(3)如果没有才会去查询 .json 文件。

所以在开发过程中最好使用其相对路径指明具体文件。

当第三方的模块和内置模块同名时,内置模块将覆盖第三方同名模块。因此命名时需要注意不要和内置模块同名。

原生模块也有一个缓存区,同样也是优先从缓存区加载。如果缓存区没有被加载过,则调用原生模块的加载方式进行加载和执行。

原生模块的本质也是文件,原生模块文件已经被编译到了二进制文件中了,我们只需要按照名字来加载就可以了。如:

1、require(‘fs’)

2、require(‘http’)

 三、路径形式的模块

我们说的路径形式的模块,其实就是加载自己写的JS文件,有四种方式可以加载

当文件模块缓存中不存在,而且不是原生模块的时候,Node.js 会解析 require 方法传入的参数,并从文件系统中加载实际的文件 。

var fooExports = require('./index')	//相对路径,常用
var fooExports = require('../index')	//相对路径,常用
var fooExports = require('/index')	//根目录,不常用
var fooExports = require('D:/demo/index')	//根目录,不常用

注意,这里忽略了扩展名“.js”,以下是对等的:

var myMod = require('./my_mod')
var myMod = require('./my_mod.js')

如果当前目录有my_mod.js和my_mod.json,则会优先加载 my_mod.js。

可以直接require一个目录,假设有一个目录名为folder,如:

var myMod = require('./folder')

此时,Node将搜索整个folder目录,Node会假设folder为一个包并试图找到包定义文件package.json。如果folder 目录里没有包含package.json文件,Node会假设默认主文件为index.js,即会加载index.js。如果index.js也不存在, 那么加载将失败。 

假如目录结构如下:

?

package.json定义如下:

{
    "name": "pack",
    "main": "modA.js"
}

此时 require('./folder') 将返回模块modA.js。如果package.json不存在,那么将返回模块index.js。如果index.js也不存在,那么将发生载入异常。 

如果foder同级目录还有folder.js和folder.json,同时folder目录下还有index.js,则require('./folder') 将返回folder.js中的内容,否则返回folder.json中的内容,否则会返回folder目录下index.js中的内容,最后才会返回modA.js中的内容。

 四、第三方模块

凡是用到第三方模块,都必须通过 npm 来下载;

使用的时候就可以通过 require(‘包名’) 的方式来进行加载才可以使用;

不可能有任何一个第三方包和核心模块的名字是一样的。

既不是核心模块、也不是路径形式的模块,就是第三方模块。

如果模块名不是路径,也不是内置模块,Node将试图去当前目录的node_modules文件夹里搜索。如果当前目录的node_modules里没有找到,Node会从父目录的node_modules里搜索,这样递归下去直到根目录。

总结:

其实主要就是两种情况:

1、如果require中是名称,则说明搜索的是内置模块或者第三方模块,此时内置模块的优先级高于第三方模块;

2、如果require中是路径,则会按照自定义模块的规则查找。

posted @ 2025-08-06 18:08  Samve  阅读(7204)  评论(0)    收藏  举报
甲减长期服用优甲乐有什么危害 男性夜间盗汗是什么原因 赵云字什么 心脏主要由什么组织构成 八个月宝宝可以吃什么水果
倭瓜是什么瓜 角膜塑形镜是什么 动容什么意思 什么牌子 照影是什么检查
血脂稠吃什么食物好 身份证什么时候开始有的 一什么月亮 cooc香水是什么牌子的 倒钩是什么意思
朝三暮四是什么生肖 五十而知天命是什么意思 革兰阴性杆菌是什么 79年属什么的生肖 尿道感染应该吃什么药
此起彼伏是什么意思chuanglingweilai.com 腔梗是什么chuanglingweilai.com 乳酸脱氢酶高是什么原因hcv8jop1ns2r.cn 月经三个月没来是什么原因hcv7jop5ns1r.cn 亥五行属什么hcv9jop7ns5r.cn
养膘是什么意思hcv8jop9ns4r.cn 西施是什么生肖hcv7jop7ns3r.cn 白癜风用什么药膏hcv9jop3ns9r.cn 脚指麻木是什么病先兆hcv8jop6ns7r.cn 钱是什么意思hcv9jop5ns1r.cn
什么那是什么吧hcv8jop9ns2r.cn 每天坚持跑步有什么好处ff14chat.com belkin是什么牌子hcv9jop6ns2r.cn 六月十六什么星座hcv9jop0ns3r.cn 为什么丰胸霜一抹就变大hcv7jop6ns3r.cn
aimee是什么意思hcv8jop2ns6r.cn 36计的第一计是什么hcv7jop6ns2r.cn 打完除皱针注意事项有什么hcv8jop8ns2r.cn 霉菌孢子是什么意思hcv8jop4ns4r.cn 录取线差是什么意思hcv9jop1ns1r.cn
百度