首页 > 其他分享 >首先加载核心模块,不管有没有同名/同目录的情况下,核心模块优先加载.

首先加载核心模块,不管有没有同名/同目录的情况下,核心模块优先加载.

时间:2023-11-16 12:11:07浏览次数:33  
标签:node index 核心 othermodule 查找 模块 加载

在文件/home/somebody/workspace/somemodule.js中第一行引用了一个模块:require(‘othermodule‘),请问require查找模块的顺序是:

A. /home/somebody/workspace/node_modules/othermodule/index.js
B. /home/somebody/workspace/node_modules/othermodule. Js
C.CORE MODULES named othermodule
D./home/somebody/node_modules/othermodule/index.js

A
C D A B

B
C B D A

C
C B A D

D
C D B A

正确答案:C

(1):首先,Node在当前目录下查找package.json(CommonJS包规范定义的包描述文件),通过JSON.parse()解析出包描述对象,从中取出main属性指定的文件名进行定位。如果文件缺少扩展名,将会进入扩展名分析的步骤。   
(2):而如果main属性制定的文件名错误,或者压根没有package.json文件,Node会将index当做默认文件名,然后依次查找index.js、index.node、index.json.   
(3):如果在目录分析的过程中没有定位成功任何文件,则自定义模块进入下一个模块路径进行查找。如果模块路径数组都被遍历完毕,依然没有查找到目标文件,则会抛出查找失败异常。   

按照上面的思路,首先应该查找package.json文件,看看里面有没有核心模块,应该是C最先,
othermodule不是核心模块,那么接着应该进入扩展名分析的步骤,就应该是查找othermodule. js,对应B,
紧接着就是以index为默认文件名,也就是A,
再接下来就是上一个文件目录D了,
所以答案是: C B A D

首先加载核心模块,不管有没有同名/同目录的情况下,核心模块优先加载.

其次按照相对路径/绝对路径加载文件模块(加载顺序,首先试图按照路径查找 .js 扩展名的文件,如果没有,试图按照路径查找 .json 扩展名的文件,如果还是没有,就按照路径查找 .node 扩展名的c++模块了)

最后搜索 node_modules 目录下通过npm下载的第三方模块.

注意:首次加载这类模块最慢,因为执行文件所在目录的node_mondel 文件夹下找不到时,会去父级node_mondel 文件夹里查找,如果还是找不到会去父级的父级node_mondel 文件夹里查找.......但是,只要首次加载成功后,node就会缓存起来,它缓存的是编译后的二进制模块,所以以后的加载速度和效率都的有保证的.

标签:node,index,核心,othermodule,查找,模块,加载
From: https://www.cnblogs.com/longmo666/p/17835956.html

相关文章

  • antd的tree的核心显示属性
     树形组件的概念 ......
  • 性能暴增70%!AMD线程撕裂者RPO 7000将于10月19日发布: 96核心Zen 4史无前例
    据wccftech最新报道,AMD的下一代RyzenThreadripper(线程撕裂者)PRO7000“StormPeak”CPU将于10月19日作为终极工作站解决方案亮相。据悉,线程撕裂者PRO7000是AMD基于Zen4架构的最新一代旗舰工作站CPU,它的推出也意味着基于Zen3的PRO5000系列将退出历史舞台。根据泄露的消息,预计线......
  • nginx安装ssl模块
    一、引言当我们的Linux服务器上当中发布了web项目,有时候需要配置一个SSL证书,来使用https,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去.二、如何补装SSL模块既然在安装的时候没有编译ssl,难道把nginx卸载重新安装一次?不不不,我们只需要在原有的基础上添加ssl模块......
  • numpy模块
    一、numpy简介numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750numpy是Python的一种开源的数值计算扩展库。这种库可用来存储和处理大型numpy数组,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)。numpy库有两个作用:区别于li......
  • 核心命令
    核心命令查询网站命令查询网站帮助命令help获得shell内置命令帮助信息man获得帮助信息文件目录类lsls#列出可见文件ls-l#列出可见文件详细信息ls-al#显示隐藏文件cdcd#切换目录cd~#切换到用户主目录cd-#回到上次目录cd..#返回上一级目录cpc......
  • mac上python安装mysqlclient模块方法
    运行pycharm后,打开命令行窗口确保您已经安装了MySQL,并且包括了MySQL的开发文件。您可以通过Homebrew来安装MySQL:brewinstallmysql#安装mysqlclient之前,先安装openssl:brewinstallopenssl#使用以下命令来安装mysqlclient:envLDFLAGS="-I/usr/local/opt/openssl/i......
  • Eclipse安装中文语言包导致部分页面功能和工作区域无法加载或使用的解决办法
    Eclipse安装中文语言包插件(eclipse菜单栏:“Help”—>“InstallNewSoftware”)出现:“Welcome”页面无法加载,“TaskList”“Outline”等工作区无法使用等情况。针对这种情况,需要卸载安装的中文语言包插件。具体步骤为:eclipse菜单栏—>“帮......
  • javascript promise all实现图片顺序加载
    不使用promise时是异步加载,图片加载的顺序不固定<!doctypehtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,user-scalable=no,initial-scale=1......
  • day14 模块和内置模块
    day14模块课程目标:掌握Python中常用模块的使用方法。今日概要:自定义模块(包)第三方模块内置模块【1/2】1.自定义模块1.1模块和包importhashlibdefencrypt(data):"""数据加密"""hash_object=hashlib.md5()hash_object.update(data.encode('utf......
  • SpringBoot和mybatisPlus得核心知识点
    SpringBoot自动配置(Auto-Configuration):SpringBoot核心特性之一是自动配置。它尝试根据项目的依赖和内容推断应用程序应该如何配置。这简化了开发人员的工作,因为他们无需手动配置大量的设置。起步依赖(StarterDependencies):SpringBoot提供了一系列预配置的依赖项,称为“起......