返回顶部
首页 > 资讯 > 前端开发 > VUE >nodejs导入模块的方法以及require模块的执行过程
  • 250
分享到

nodejs导入模块的方法以及require模块的执行过程

2024-04-02 19:04:59 250人浏览 独家记忆
摘要

这篇文章主要介绍“nodejs导入模块的方法以及require模块的执行过程”,在日常操作中,相信很多人在nodejs导入模块的方法以及require模块的执行过程问题上存在疑惑,小编查阅了各式资料,整理出

这篇文章主要介绍“nodejs导入模块的方法以及require模块的执行过程”,在日常操作中,相信很多人在nodejs导入模块的方法以及require模块的执行过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nodejs导入模块的方法以及require模块的执行过程”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

最近在看node,所以就特意了解了下,它模块引入的过程。今天做个回顾记录,希望对正在阅读的你也有所帮助

node中的模块分类

  • 核心模块,或者称内置模块(就是node自带的 fs ,Http,vm。。。)详情见官网api

  • 第三方模块 ,或者自己封装的npm包放私库或者公库上(npm 上 通过 npm install来安装使用的)

  • 文件模块,项目内部文件,通过相对路径或者绝对路径的方法require使用

模块的导入require

我这边的调试工具用的是vscode自带的

nodejs导入模块的方法以及require模块的执行过程

require的过程

1、读取文件,进入require方法 return mod.require(path)

nodejs导入模块的方法以及require模块的执行过程

2、进入mod.require发现是 实质执行了Module.prototype.require,(这里的id就是一开始的path),嗯~ 怎么又调用了Module._load,木的事,我们继续走

nodejs导入模块的方法以及require模块的执行过程

3、进入Module._load(),Module._load(id, this, false)根据路径加载模块

  • 以文件名作为 Module._cache 对象的键查询该文件是否已经被缓存,命中缓存的话,直接 exports

nodejs导入模块的方法以及require模块的执行过程

  • 如果不存在缓存数组中,Module._resolveFilename解析文件路径 为绝对路径,再执着的去查一次缓存,命中缓存的话 exports

nodejs导入模块的方法以及require模块的执行过程

  • 前两次的缓存查找排除了外部模块的,再判断是不是内置模块,是的话 就exports

nodejs导入模块的方法以及require模块的执行过程

  • 走到这里真的说明这个模块真的没有缓存过,那就new 一个

nodejs导入模块的方法以及require模块的执行过程

4、new Module()进入,创建空对象this.exports = {}:也就是我们最终要的exports对象,(其他模块里引模块 此处不继续深入研究)

nodejs导入模块的方法以及require模块的执行过程

5、Module._cache[filename] 步骤3中解析的路径做key ,步骤4中创建的对象做值存入我们的缓存数组。keep Going!!

nodejs导入模块的方法以及require模块的执行过程

6、module.load(),进入该函数

nodejs导入模块的方法以及require模块的执行过程

nodejs导入模块的方法以及require模块的执行过程

  • findLongestReGISteredExtension计算文件名后缀,

  • Module._extensions[extension](this, filename)根据不同的后缀去调用不同的加载方法(这里用的是策略模式)

  • 我这里命中的是.js,该方法里又用fs.readFileSync同步读取文件,然后作参数调用 module._compile(content, filename)

nodejs导入模块的方法以及require模块的执行过程

7、module._compile()进入 ,发现又将content作wrapSafe(filename, content, this)的参数执行

nodejs导入模块的方法以及require模块的执行过程

8、再进入wrapSafe()ps:我这里直接讲老版本的,执行比较好理解

nodejs导入模块的方法以及require模块的执行过程

  • 先是调用了Module.wrap,进入该函数,node模块包装成了必包的样子(function (){ }),形成一个独立模块

nodejs导入模块的方法以及require模块的执行过程

  • 然后将返回的包装过的字符串模块做vm.runInThisContext参数 执行该模块代码(和js中new Function一样的效果 可以让字符串变成js来执行),node自己的内置方法详情查阅node官方

9、到这里 一个模块的require过程就执行完了,用户就会默认拿到module.export的返回结果

总结

  • 读取文件

  • 读取到文件以后给文件包装一个函数

  • 函数格式function (exports,module,require,_dirname,filename){}

  • 通过runThisContext将模块变成js语法进行调用

到此,关于“nodejs导入模块的方法以及require模块的执行过程”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: nodejs导入模块的方法以及require模块的执行过程

本文链接: https://lsjlt.com/news/65745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • nodejs导入模块的方法以及require模块的执行过程
    这篇文章主要介绍“nodejs导入模块的方法以及require模块的执行过程”,在日常操作中,相信很多人在nodejs导入模块的方法以及require模块的执行过程问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2024-04-02
  • Python导入模块的方法
    Python导入模块的方法有两种:import module 和 from module import a,区别是前者所有导入的东西使用时需加上模块名的限定(module.a),而后者不需要。 导入一个模块,Python 解析器对模块位置...
    99+
    2023-01-30
    模块 方法 Python
  • python导入pygame模块的方法
    这篇“python导入pygame模块的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python导入pygame模块的...
    99+
    2023-06-30
  • Python模块导入的几种方法
    在Python语言的编辑器里,除了默认的内置函数外,其他函数的调用,必须先通过import语句将其导入才能使用。 import语句导入整个函数模块 导入方法: import 函数模块名 示例 新建一个名为func_test.py的文件,...
    99+
    2023-01-30
    模块 几种方法 Python
  • 详解Node中导入模块require和import的区别
    ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使用mo...
    99+
    2022-06-04
    详解 模块 区别
  • python 动态导入模块实现模块热更新的方法
    最近有个部署需求,需要读取py文件格式的配置项,我的实现思路是把配置文件解析到内存中。主要使用两种方法: importlib.import_moduletypes.ModuleTyp...
    99+
    2024-04-02
  • JavaScript ES6模块导入和导出的方法
    目录前言:1.默认导入导出2.按需导入导出第一种情况,age is not defined第二种情况,sex is not defined 3.默认导出和整体导出一起使用总...
    99+
    2024-04-02
  • JS中导入模块import和require的区别是什么
    这篇文章主要介绍“JS中导入模块import和require的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JS中导入模块import和require的区别是什么”文章能帮助大家解决问题。...
    99+
    2023-07-05
  • python模块导入的方法有哪些
    在Python中,有几种导入模块的方法,包括:1. 使用`import`语句导入整个模块:可以使用`import module_na...
    99+
    2023-08-08
    python
  • Python导入模块的方法有哪些
    这篇文章主要介绍“Python导入模块的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python导入模块的方法有哪些”文章能帮助大家解决问题。很多初学者经常遇到这样的问题,即自定义 Py...
    99+
    2023-07-05
  • Javascript模块导入导出的方法是什么
    这篇“Javascript模块导入导出的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Javascript模块导入...
    99+
    2023-07-04
  • node中http模块的使用及执行流程
    在node中http有什么作用 http这个模块的职责就是帮你创建编写服务器 执行流程  1. 加载http模块 const http = require('htt...
    99+
    2024-04-02
  • Python实现以主程序的形式执行模块
    前言: 这个先来创建一个模块,名称为christmastree,在该模块中,首先定义一个全局变量,然后创建一个名称为fun_christmastree()的函数,最后再通过print...
    99+
    2024-04-02
  • python中模块导入的方法有哪些
    在Python中,模块导入的方法有以下几种:1. import语句:使用import关键字导入一个模块。例如:```import m...
    99+
    2023-09-13
    Python
  • 深入学习nodejs中的async模块的使用方法
    最近在学习nodejs,这两天学习了async模块这个地方知识点挺多的,所以,今天添加一点小笔记。 async模块是为了解决嵌套金字塔,和异步流程控制而生.常用的方法介绍 npm 安装好async模块,然...
    99+
    2022-06-04
    使用方法 模块 nodejs
  • nodejs的http模块方法怎么使用
    这篇文章主要讲解了“nodejs的http模块方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs的http模块方法怎么使用”吧! ...
    99+
    2024-04-02
  • Node.js Buffer模块的方法以及示例分析
    Node.js Buffer模块的方法以及示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。二进制流是大量的二进制数据的集合。由于通常情况下二进制流的大小挺大...
    99+
    2023-06-22
  • Python模块导入的方式有哪些
    这篇文章给大家分享的是有关Python模块导入的方式有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概念Python 模块是一个以 .py 结尾的 Python 文件,包含了 Python 对象定义和Pyth...
    99+
    2023-06-02
  • Python有哪些导入模块的方式
    本篇内容介绍了“Python有哪些导入模块的方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!常规导入常规导入应该是最常使用的导入方式,大概...
    99+
    2023-06-02
  • python模块导入的写法有哪些
    在Python中,有几种不同的方式可以导入模块。以下是一些常见的写法: import语句:使用import关键字导入整个模块。 ...
    99+
    2023-10-23
    python
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作