位置: 编程技术 - 正文

Node.js中require的工作原理浅析(nodejs requirejs)

编辑:rootadmin

推荐整理分享Node.js中require的工作原理浅析(nodejs requirejs),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs require原理,node js require,node.js restful,node js require,node require,nodejs requirejs,nodejs req,node js require,内容如对您有帮助,希望把文章链接给更多的朋友!

几乎所有的Node.js开发人员可以告诉你`require()`函数做什么,但我们又有多少人真正知道它是如何工作的?我们每天都使用它来加载库和模块,但它的行为,对于我们来说反而是一个谜。

出于好奇,我钻研了node的核心代码来找出在引擎下发生了什么事。但这并不是一个单一的功能,我在node的模块系统的找到了module.js。该文件包含一个令人惊讶的强大的且相对陌生的核心模块,控制每个文件的加载,编译和缓存。`require()`,它的横空出世,只是冰山的一角。

module.js 在module.js在Node.js内部主要承担两个角色。首先,它为所有的Node.js模块提供了一个基础。每个文件是基本模块new出的一个新实例,即使在该文件已经运行之后,仍然存在。这就是为什么我们能够性为module.exports附加属并在需要时返回它们。

该模块的第二大任务是处理node的模块加载机制。我们使用的独立操作的“require”函数实际上是一个抽象概念的module.require,这本身就是只是一个简单的关于Module._load功能的封装。此load方法处理每个文件的实际加载,并在那里开始我们的旅程。

Module._load

Module._load负责加载新的模块和管理模块的缓存。缓存加载的每个模块减少冗余文件的读取次数,并可以显著地加快您应用程序的速度。此外,共享模块实例允许单例特性的模块,保持在项目中的状态。

如果某个模块没有在缓存中存在,Module._load将创建该文件的一个新的基本模块。然后,它会告诉模块在将它们发送到module._compile之前阅读新文件的内容。[1]

如果您注意到上面的步骤#6,你会看到module.exports已被返回给用户。这就是为什么当你在定义公共接口使用时,你使用exports和module.exports,因为Module._load将接下来返回require的内容。我很惊讶,这里没有更多的功能,但如果有的话那更好。

Node.js中require的工作原理浅析(nodejs requirejs)

module._compile

· 这是真正的奇迹发生的地方。首先,一个特殊的独立操作的require函数是为该模块创建的。这是我们需要的并且都熟悉的功能。而函数本身只是一个在Module.require的封装,它也包含了一些便于我们使用的鲜为人知的辅助方法:

· require():加载一个外部模块 · require.resolve():解析一个模块名到它的绝对路径 · require.main:主模块 · require.cache:所有缓存好的模块· ·require.extensions:根据其扩展名,对于每个有效的文件类型可使用的编制方法

一旦require准备好了,整个加载的源代码就会被封装在一个新的函数里,可以接受require,module,exports和所有其他暴露的变量作为参数。这是一个仅仅为封装模块的而创建的函数,以便于在防止与Node.js的环境产生冲突。该Module._compile方法是同步执行的,所以对Module._load的调用只能等到这段代码运行结束,并将module.exprts返回给用户。

结论

因此,我们已经了解了require的全部代码,并已经初步了解它是如何工作的。

如果你已经按照这一切的方式做了,那么你已经为最后的秘密做好准备:require('module')。这是正确的,该模块系统本身可以通过模块系统被加载。盗梦空间。这可能听起来很奇怪,但它可以让用户空间同模块加载系统互动起来,并不需要钻研Node.js核心。受欢迎的模块都像这样被建立。[2]

如果您想了解更多,请自己查看module.js源代码。还有很多东西足够你头痛一段时间了。第一个可以告诉我什么是NODE_MODULE_CONTEXTS“以及它为什么被添加的人可以得到加分奖励 :)

[1] module._compile方法只用于运行JavaScript文件。 JSON文件需通过JSON.parse() 解析并返回

[2]然而,这两个模块都建立在私有模块的方法,如Module._resolveLookupPaths和Module._findPath。你可以认为这并没有好多了...

搭建pomelo 开发环境 开发前提条件:Windows系统,请确保你的Windows系统包含源码编译工具。Node.js的源码主要由C++代码和JavaScript代码构成,但是却用gyp工具来做源码的项目管

node.js学习总结之调式代码的方法 前言你有没有曾经调式某段代码时,总觉得世界上有鬼?你有没有曾经调式API时,总感觉是调用第三方的接口问题或者文档说明不对?你有没有曾经调

node.js实现逐行读取文件内容的代码 在此之前先介绍一个逐行读取文件内容NPM:

标签: nodejs requirejs

本文链接地址:https://www.jiuchutong.com/biancheng/374149.html 转载请保留说明!

上一篇:Nodejs中自定义事件实例(nodejs yield)

下一篇:搭建pomelo 开发环境(怎么创建pom.xml)

  • 物流公司车子保险费怎么做账
  • 住宿开发票的税率是多少
  • 研发支出期末余额列报
  • 轿车被盗
  • 公允价值变动损益和投资收益区别
  • 计提残疾人保障金的基数是什么
  • 公司注销后会计凭证保管年限
  • 原材料采购没正式发票能否入账?
  • 计提租金分录怎么处理
  • 破产企业公司还要交税吗
  • 在汇兑结算方式中汇入行对流行代取的款项应先转入
  • 堤围工程
  • 报税没有申报现金流量表
  • 建筑行业不管是什么行业
  • 集团内部股权无偿划转引起资本公积增加需要印花税
  • 年终奖扣税标准计算器
  • 接受个人投资现金怎么做账务处理?
  • 加计扣除农产品进项税额
  • 企业白条报销和采取措施
  • 职工餐厅账务处理
  • 备案类减免税有几种类型
  • 公司名下商品房卖给个人后房产税怎么交
  • 鸿蒙系统获取电脑文件
  • rcapi.exe - rcapi是什么进程 有什么用
  • 去年的费用今年报销如何记账
  • php自定义变量
  • win10分辨率调整
  • 用友结转所得税费用
  • 房地产企业土地使用税计算方法
  • 应收款减少怎么做账
  • 旅行社的会计
  • VS2022(Visual Studio)发布ASP.NET Core Web API应用到Web服务器(IIS)
  • php使用crypt()函数进行加密
  • 工业企业库存商品的初始入账成本有
  • 图片转base64格式返回给前端,前端如何展示?
  • 税务局罚款计入哪个会计科目
  • echarts中国地图代码
  • echarts在地图上标记图标
  • modulenotfounderror
  • 帝国cms使用手册
  • 火车票抵扣进项税需要认证吗
  • 对企业采取以旧换新方式销售的应税产品
  • 应收贷方表示啥
  • 坏账准备计提范围包括
  • 财政拨款结转的核算
  • 企业重组的特殊性税务处理例题
  • 土地入固定资产计提折旧吗
  • 企业所得税的营业收入包括营业外收入吗
  • 新办企业发票核定及申领
  • 对公付款对方不发货不退钱怎么处理
  • 房租押金不退还的账务怎么处理
  • 企业不计提固定资产损失
  • 收回已确认并转销的应收账款会导致坏账准备的金额增加
  • 积分购物骗局
  • 固定资产置换存货
  • 工程物资属于什么项目
  • 财产清查怎么做分录
  • 母子公司可以合并吗
  • 利润表季度申报本月金额却怎么填
  • 固定资产二级明细科目有哪些
  • mysql5.7安装教程详细
  • 让Vista响应更快
  • win8怎么禁止开机启动项
  • spoolsrv32.exe - spoolsrv32进程是什么文件 有何作用
  • windows xp能装微信吗
  • windows打开
  • JavaScript中的NaN代表什么
  • django ajax请求
  • 安卓开源好处
  • css首字母大写
  • JavaScript 浏览器对象
  • json初学
  • 修复硬盘
  • jQuery的ajax和遍历数组json实例代码
  • Android 4.4 Dialog 被状态栏遮挡的解决方法
  • 河南电子发票申请流程
  • 绩效三级指标体系
  • 扬州税务学院住宿环境
  • 税盘数字证书密码怎么查看
  • 缴纳耕地占用税的好处
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设