广告
返回顶部
首页 > 资讯 > 前端开发 > 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://www.lsjlt.com/news/65745.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • nodejs导入模块的方法以及require模块的执行过程
    这篇文章主要介绍“nodejs导入模块的方法以及require模块的执行过程”,在日常操作中,相信很多人在nodejs导入模块的方法以及require模块的执行过程问题上存在疑惑,小编查阅了各式资料,整理出...
    99+
    2022-10-19
  • 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
  • JavaScript ES6模块导入和导出的方法
    目录前言:1.默认导入导出2.按需导入导出第一种情况,age is not defined第二种情况,sex is not defined 3.默认导出和整体导出一起使用总...
    99+
    2022-11-13
  • python 动态导入模块实现模块热更新的方法
    最近有个部署需求,需要读取py文件格式的配置项,我的实现思路是把配置文件解析到内存中。主要使用两种方法: importlib.import_moduletypes.ModuleTyp...
    99+
    2022-11-11
  • Python导入模块的方法有哪些
    这篇文章主要介绍“Python导入模块的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python导入模块的方法有哪些”文章能帮助大家解决问题。很多初学者经常遇到这样的问题,即自定义 Py...
    99+
    2023-07-05
  • python模块导入的方法有哪些
    在Python中,有几种导入模块的方法,包括:1. 使用`import`语句导入整个模块:可以使用`import module_na...
    99+
    2023-08-08
    python
  • Javascript模块导入导出的方法是什么
    这篇“Javascript模块导入导出的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Javascript模块导入...
    99+
    2023-07-04
  • python中模块导入的方法有哪些
    在Python中,模块导入的方法有以下几种:1. import语句:使用import关键字导入一个模块。例如:```import m...
    99+
    2023-09-13
    Python
  • node中http模块的使用及执行流程
    在node中http有什么作用 http这个模块的职责就是帮你创建编写服务器 执行流程  1. 加载http模块 const http = require('htt...
    99+
    2022-11-12
  • 深入学习nodejs中的async模块的使用方法
    最近在学习nodejs,这两天学习了async模块这个地方知识点挺多的,所以,今天添加一点小笔记。 async模块是为了解决嵌套金字塔,和异步流程控制而生.常用的方法介绍 npm 安装好async模块,然...
    99+
    2022-06-04
    使用方法 模块 nodejs
  • Python实现以主程序的形式执行模块
    前言: 这个先来创建一个模块,名称为christmastree,在该模块中,首先定义一个全局变量,然后创建一个名称为fun_christmastree()的函数,最后再通过print...
    99+
    2022-11-11
  • Node.js Buffer模块的方法以及示例分析
    Node.js Buffer模块的方法以及示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。二进制流是大量的二进制数据的集合。由于通常情况下二进制流的大小挺大...
    99+
    2023-06-22
  • python导入自定义模块的方法是什么
    要导入自定义模块,可以使用以下方法:1. 在同一目录下导入模块:- 将自定义模块文件(.py文件)放在与主程序(调用模块的脚本)相同...
    99+
    2023-08-29
    python
  • Python中的模块导入和读取键盘输入的方法
    导入模块 import 语句 想使用Python源文件,只需在另一个源文件里执行import语句,语法如下: import module1[, module2[,... moduleN] 当解释器...
    99+
    2022-06-04
    模块 键盘输入 方法
  • Python中的模块heapq以及使用方法详解
    python中的 heapq 模块 1、heapq 的两个函数:nlargest() 和 nsmallest() 1.1 nlargest(n, iterable, key=None) 函数 功能:获...
    99+
    2023-09-01
    python 开发语言 队列 heapq
  • Python如何实现以主程序的形式执行模块
    今天小编给大家分享一下Python如何实现以主程序的形式执行模块的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言:这个先来...
    99+
    2023-07-02
  • Python在不同目录下导入模块的实现方法
    python在不同层级目录import模块的方法 使用python进行程序编写时,经常会调用不同目录下的模块及函数。本篇博客针对常见的模块调用讲解导入模块的方法。 1. 同级目录下的调用 目录结构如下: ...
    99+
    2022-06-05
    模块 方法 目录下
  • Python中导入自定义模块的几种方法总结
    目录Python导入自定义模块的几种方法Python命令行模式导入自定义类不成功及导入自定义模块报错ImportError错误1:导入自定义类不成功错误2:导入自定义模块报错Impo...
    99+
    2023-01-04
    Python导入自定义模块 Python导入模块 自定义模块导入
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作