node模块的本质

 对于一个模块而言,有两个关键的地方,一是有自己的作用域,二是有对外暴露的接口

不知道大家有没有想过这样一个问题,模块是怎么实现上面两个特性的呢?其实通过一个 立即执行函数 就可以了

实际上 Node 在编译的时候,会在我们写的代码外包上一层立即执行函数,并传入一些必须的参数

  • exports:用于导出模块数据,module.exports 的一个引用

  • require:用于导入其它模块

  • module:包含当前模块的基本信息

  • __filename:当前模块的绝对路径

  • __dirname:当前模块所在目录的绝对路径

(function (exports, require, module, __filename, __dirname) {/* 我们写的代码 */
})()

我们上面使用的 requireexports 都是在编译时传入的,我们可以把传入的参数打印出来看一下

// 打印
console.log(__filename)
console.log(__dirname)
console.log(exports)
console.log(module)
console.log(require)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/18288.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见5大开发进度盲点问题及解决方案

在软件开发项目中,识别并解决常见的进度管理盲点问题,对于确保项目按时、按预算、高质量完成至关重要。它直接关系到项目能否顺利进行,忽视任何一个问题,都可能导致项目延期、成本超支、质量下降,甚至项目失败。 因此&…

IT技术培训班:实用还是虚幻?

在学习IT技术的过程中,我经常被各种五花八门的技术培训班所安利。这些培训班以各种方式向我宣传,声称可以快速提升技能、获得认证、找到高薪工作等,让我不禁怀疑:在培训班里学技术真的有用吗?我对此抱有怎样的态度呢&a…

香橙派华为昇腾CANN架构编译opencv4.9

香橙派华为升腾AI盒子 为啥要编译opencv4.9.0, 因为在4.9.0 中增加了华为昇腾CANN的外接开发库,下图为盒子外观,此次一接到这个盒子,立刻开始开箱操作,首先就是要编译opencv4.9,以前在香橙派3588 的盒子中…

大模型应用:LLM基本原理及应用场景

1.背景 23年以来,随着OpenAI公司的ChatGPT横空出世,大模型一词开始火爆全球。国内外以OpenAI、Google、百度、阿里、字节等大厂为代表,相继推出一系列大模型及其应用,涉及社交、问答、代码助手等多个方面。 目前主流的大模型及产…

Echarts - 多个页面内有N个 echarts 图表,封装组件 CommonEcharts 快捷实现

目录 子组件父组件使用注意 option 文件效果展示相关数据处理&#xff08;代码备份 - 可不看&#xff09;数据处理后页面展示 子组件 CommonEcharts.vue <template><div><div v-for"id in domId" :id"id" :key"id" class"…

代码随想录算法训练营Day53 | 1143.最长公共子序列、1035.不相交的线、53. 最大子序和 | Python | 个人记录向

本文目录 1143.最长公共子序列做题看文章 1035.不相交的线做题看文章 53. 最大子序和做题看文章 以往忽略的知识点小结个人体会 1143.最长公共子序列 代码随想录&#xff1a;1143.最长公共子序列 Leetcode&#xff1a;1143.最长公共子序列 做题 无思路。 看文章 dp[i][j]&…

基于事件的架构工作机制和相关产品

基于事件的架构 基于事件的架构可否这样理解&#xff0c;每个事件相当于传统API的一次函数调用请求&#xff0c;比如Add(123,456)。区别在于&#xff0c;基于事件的架构只是把这个请求发出&#xff0c;并不急于得到结果&#xff0c;而是等合适的子系统处理完这个请求&#xff…

go select

select 是与 switch 相似的控制结构&#xff0c;与 switch 不同的是&#xff0c;select 中虽然也有多个 case&#xff0c;但是这些 case 中的表达式必须都是 channel 的收发操作。 select 能够让 goroutine 同时等待多个 channel 可读或者可写&#xff0c;在多个 channel 状态改…

使用awk对nginx access.log进行统计分析

nginx可以配置访问日志&#xff0c;如果我们要对日志文件进行统计分析&#xff0c;在linux环境下可以借助awk命令完成。 日志格式配置如下所示&#xff1a; log_format access_json {"timestamp":"$time_iso8601","host":"$server_addr&qu…

Flutter 中的 AnimatedOpacity 小部件:全面指南

Flutter 中的 AnimatedOpacity 小部件&#xff1a;全面指南 在Flutter中&#xff0c;动画是一种为用户提供视觉反馈和增强用户体验的强大工具。AnimatedOpacity是Flutter动画库中的一个组件&#xff0c;它允许你通过改变一个组件的透明度来创建淡入和淡出效果。本文将详细介绍…

章十五、Maven —— Maven 简介、Maven 开发环境搭建、命令、打包案例

一、 Maven 简介 Maven 是 Apache 软件基金会的一个开源项目&#xff0c;是一个优秀的项目构建工具&#xff0c;它用来帮助开发者管理项目中的 jar&#xff0c;以及 jar 之间的依赖关系&#xff08;在A.jar文件中用到了B.jar&#xff09;、完成项目的编译&#xff08;.java -&g…

Compose Button移除水波纹效果

一、背景 在使用Compose实现Button按钮时&#xff0c;设计要求移除按钮的水波纹效果&#xff0c;只保留按压效果&#xff0c;经查Compose1.4.3版本中&#xff0c;并没有直接移除水波纹的能力 二、遇到问题 经过多次尝试&#xff0c;使用Compose的Button组件始终无法实现目标效…

html通过数据改变,图片跟着改变

改变前 改变后 通过数据来控制样式展示 <template><div>通过num控制图标是否更改{{num}}<div class"box"><!-- 如果num大于1则是另一种&#xff0c;样式&#xff0c;如果小时1&#xff0c;则是另一种样式 --><div class"item&qu…

android怎么告诉系统不要回收

在Android中&#xff0c;如果你想告诉系统不要回收你的应用程序&#xff0c;可以通过设置Activity的属性来实现。你可以设置android:configChanges属性&#xff0c;指定在哪些配置更改时不重新创建Activity。 例如&#xff0c;如果你想指示系统在屏幕方向更改时不要重新创建Ac…

又是一知识点

1.说一下什么是mvvm模式 Model代表数据模型&#xff0c;数据和业务逻辑都在Model层中定义&#xff1b;View代表UI视图&#xff0c;负责数据的展示&#xff1b;ViewModel负责监听Model中数据的改变并且控制视图的更新&#xff0c;处理用户交互操作&#xff1b; View 的变化会自…

小阿轩yx-Shell 编程之循环语句与函数

小阿轩yx-Shell 编程之循环语句与函数 for 循环语句 可以很好地解决顺序编写异常烦琐、困难重重的全部代码 &#xff08;&#xff09;{}&#xff1a;里边写的都是命令 &#xff09;&#xff1a;不能嵌套 $&#xff08;&#xff09;&#xff1a;可以嵌套&#xff0c;适合更…

day42 62.不同路径 63. 不同路径 II

62.不同路径 思路 机器人从(0 , 0) 位置出发&#xff0c;到(m - 1, n - 1)终点。 按照动规五部曲来分析&#xff1a; 1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j] &#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#xff0c;…

2-Django项目进阶--继续学生管理系统

目录 项目框架: urls.py views.py modules.py class_data.html add_and_modify.html add_stu.html 笔记: 继承语法 模板继承总结&#xff1a; 班级添加 add_and_modify.html 修改添加公用一个页面即可 views.py 班级修改 views.py url.py 班级删除 views.py…

boost asio异步服务器(2)实现伪闭包延长连接生命周期

闭包 在函数内部实现一个子函数&#xff0c;子函数的作用域内能访问外部函数的局部变量。闭包就是能够读取其他函数内部变量。但是由于闭包会使得函数中的变量都被保存在内存中&#xff0c;内存消耗很大&#xff0c;所以不能滥用闭包&#xff0c;否则会造成程的性能问题&#x…

构造器--5.28

不用一个个属性赋值的方法&#xff1a; 知道了类的创建与使用&#xff0c;但是每次赋值都是一个个调用&#xff0c;我们可以用构造器使得方法简单一点&#xff0c;不用一个个调用属性赋值&#xff0c;直接传参就OK了&#xff1b; 点击类名然后ctrl可以查看构造器 public yanxi…