Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >node中的node模块包装器函数是什么意思

node中的node模块包装器函数是什么意思
EN

Stack Overflow用户
提问于 2018-07-15 15:50:58
回答 3查看 11.2K关注 0票数 7

我想知道,模块包装器函数是什么意思,它对我的代码有什么作用?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(function (exports, require, module, __filename, __dirname) {  


 });
EN

回答 3

Stack Overflow用户

发布于 2018-07-15 15:55:22

原始答案

根据Node.js documentation的说法

在模块代码执行之前,Node.js将使用如下所示的函数包装器对其进行包装:

(函数(exports,require,module,__filename,__dirname) { //模块代码实际在这里});

通过这样做,Node.js实现了以下几点:

  • 它将顶级变量(使用var、const或let定义)的作用域设置为模块,而不是全局对象。
  • 它有助于提供一些实际特定于模块的全局变量,例如:
    • 模块和导出对象,实现者可以使用这些对象从模块中导出值。包含模块的绝对文件名和目录path.

的方便变量

  • __filename和__dirname

本质上,此包装器用于配置模块,并允许使用变量exports**,** require**,** module**,** __filename****__filename**,** __dirname**.**

编辑

OP还提到了processglobal变量。

  • The process object提供关于当前节点进程的信息以及对当前节点进程的控制。
    • 它会发出诸如exituncaughtException之类的事件来管理节点进程。
    • 它还包括诸如process.abort()之类的函数来结束当前进程。
    • 要查看所有信息,请参阅Node documentation on process

  • global 提供了一个用于访问和设置全局变量的系统。例如,如果您在一个模块中执行global.something = true,那么在另一个模块中,您可以访问something,它将是true (而不必导出它)。
  • Node global documentation.

上阅读更多信息

编辑2

您还可以编辑包装器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let Module = require('module');

Module.wrap = (function (exports, require, module, __filename, __dirname) {
    // What you want the new wrapper to be.
    return Module.wrapper[0] + exports + 'console.log("This is the wrapper.");' + Module.wrapper[1];
});
票数 10
EN

Stack Overflow用户

发布于 2018-10-16 14:36:10

我想,我在这篇文章中有点晚了,但我想在这里分享我的2点看法。

因此,您编写的表达式是IIFE (立即调用的函数表达式)。

基本上,(Node)文件中的代码被包装在这个特定的函数中。当有人需要此文件时,someone会自动运行,并为您提供module.exports、exports、__dirname、__filename等对象。

这些对象不是全局的,而是模块(文件)的本地对象。这些都是通过这个IIFE函数提供的。使用此对象可以导出您的模块。

文档的链接已经在上面的答案中提供了,这应该会有帮助。

票数 2
EN

Stack Overflow用户

发布于 2018-07-15 15:55:57

如果你写了一些代码,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fs = require("fs");
module.exports = fs.readFileSync(__dirname + "test.txt");
process.exit();

然后,您将使用大量未通过js规范定义的全局变量,它们仅在node中可用。为了使它们对代码可用,您执行的代码将包含在您引用的函数中,该函数允许您访问它们。他们也可以写一些C++代码来解决这个问题,但那会复杂得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51349900

复制
相关文章
Linux中创建自己的MOTD[通俗易懂]
  motd:是英文缩写message of the day 。译文是:每日提示信息,问候报文。那你为什么要用MOTD?其实目的很简单,是提示进入系统的用户注意事项,或提示系统运行的概要信息让用户更好的了解系统。在Linux系统要实现自己的MOTD,首先需要认识/etc/motd文件。
全栈程序员站长
2022/09/20
5K0
Linux中创建自己的MOTD[通俗易懂]
如何在50行以下的Python代码中创建Web爬虫
有兴趣了解Google,Bing或Yahoo的工作方式吗?想知道抓取网络需要什么,以及简单的网络抓取工具是什么样的?在不到50行的Python(版本3)代码中,这是一个简单的Web爬虫!(带有注释的完整源代码位于本文的底部)。
iOSDevLog
2018/08/10
3.2K0
如何在50行以下的Python代码中创建Web爬虫
代码管理| 创建自己的私有Cocopods库
iOS组件化的实现基本基于cocoapods,如何使用cocoapods创建自己的组件库,是实现组件化的第一要素,下面就创建自己的私有Cocopods库展开实战记录。
進无尽
2018/09/12
1.8K0
代码管理| 创建自己的私有Cocopods库
[基础]Javascript中的继承示例代码
面向对象的语言必须具备四个基本特征: 1.封装能力(即允许将基本数据类型的变量或函数放到一个类里,形成类的成员或方法) 2.聚合能力(即允许类里面再包含类,这样可以应付足够复杂的设计) 3.支持继承(父类可以派生出子类,子类拥有父母的属性或方法) 4.支持多态(允许同样的方法名,根据方法签名[即函数的参数]不同,有各自独立的处理方法) 这四个基本属性,javascript都可以支持,所以javascript确实是一种弱类型的面向对象的语言,这里给出一个简单的类继承的代码 <script type=
菩提树下的杨过
2018/01/22
7850
创建自己的Code Snippets在VSCode中
1. Go to Code → Preferences → User Snippets
前端知否
2020/03/23
2.7K0
创建自己的Code Snippets在VSCode中
如何在js中创建对象
七夕临近了,没有对象的来创建一个吧 使用对象字面量: const o = { name: "zehan", greeting() { return `Hi, 我是${this.name}`; } }; o.greeting(); // "Hi, zehan" 使用构造函数: function Person(name) { this.name = name; } Person.prototype.greeting = function () { return `Hi, 我是
ZEHAN
2020/09/23
7.6K0
如何在Mac中创建MiniKube
Minikube是一个工具,可以在本地轻松运行Kubernetes。 Minikube在笔记本电脑的VM中运行单节点Kubernetes集群,供希望尝试Kubernetes或日常开发的用户使用。
方志朋
2022/05/08
2.4K0
如何在Mac中创建MiniKube
如何在Dynamo中创建UI
本文介绍了如何在Dynamo中创建UI,通过使用WPF技术实现了窗口的创建和交互。首先介绍了IronPython和Dynamo的基础知识,然后讲解了实现原理和准备工作。最后通过具体的操作步骤和代码示例讲解了如何在Dynamo中创建UI。
企鹅号小编
2018/01/05
2.1K0
如何在Dynamo中创建UI
使用 Numpy 创建自己的深度学习框架(附代码)
来源:DeepHub IMBA本文约2600字,建议阅读6分钟本文通过手动实现来介绍建基本深度学习框架所需组件和步骤。 本文并不是为了造轮子,只是通过手动实现来介绍建基本深度学习框架所需组件和步骤。 Numpy 已经提供了基本上所有需要的计算操作,我们需要的是一个支持自动微分(autograd)的框架来计算多个操作的梯度,这是模块化方法构建神经网络层的标准化方法,通过自动微分的框架,我们可以将优化器、激活函数等组合在一起用于训练神经网络。 所以一个基本的深度学习框架的组件总结如下: 一个autograd系
数据派THU
2022/06/14
3380
使用 Numpy 创建自己的深度学习框架(附代码)
代码管理 | 创建并管理自己的公有Cocopods库
一是直接将这部分代码copy到绘本阅读这个项目中; 二是将语音评测这部分逻辑给抽取出来,然后在分别在两处使用。
進无尽
2018/09/12
9290
代码管理 | 创建并管理自己的公有Cocopods库
如何在 WordPress 中创建联系表格?
假设我们有一个 WordPress 网站,并且我们想要添加一个功能,让他们可以联系他们所拥有的查询。我们可以通过使用网站上的 WordPress 插件添加联系表格来做到这一点。因此,这将为你的访问者提供一种与你联系的方式,当他们需要帮助或有什么要分享的时候。
海拥
2022/12/19
2.9K0
如何在 WordPress 中创建联系表格?
如何在 WordPress 中创建登录页面
登陆页面: 登陆页面是为特定受众制定的具有特定目标的目标页面,可以描述为“一页一目的”。登陆页面必须有一个“号召性用语”,并牢记特定目标。成功的着陆页是具有更高转化率、更高参与度和更高质量潜在客户的页面。
海拥
2022/10/04
2.9K0
如何在 WordPress 中创建登录页面
AtomicInteger 底层实现原理是什么? 如何在自己代码中应用 CAS 操作
AtomicInteger 是对 int 类型的一个封装,提供原子性的访问和更新操作,其原子性的操作实现是基于 CAS (compare-and-swap)技术。
王小明_HIT
2020/05/13
3.2K0
创建自己的技能
C:\server\src\map\status_effect.h 添加下文信息 805 时游戏官方默认的,我们添加1001 – 1005 并修改 MAX_EFFECTID 为我们定义最大 +1
收心
2022/08/24
6040
如何在Oozie中创建有依赖的WorkFlow
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- 在使用Hue创建WorkFlow时,单个WorkFlow中可以添加多个模块的依赖,使各个模块之间在WorkFlow内产生依赖关系,如果对于一个WorkFlow被其它多个WorkFlow依赖(如:AWorkFlow执行成功后,BWorkFlow和CWorkFlow依赖AWorkFl
Fayson
2018/07/12
6.5K2
如何在git中创建新分支
介绍 Git 是一个开源版本控制系统,用于在软件开发过程中跟踪更改。它的相互独立的分支模型使其脱颖而出。分支可以基于以前版本的软件来保持当前进度的完整性,同时处理错误修复或新功能。 在本地创建 Git 存储库 要创建新的 Git 存储库,请在终端中输入以下命令: mkdir rumenz cd rumenz git init 这将在 rumenz 目录中创建并初始化一个新的 Git 存储库。创建一个新的降价文件并添加一行文本: echo This is a line of text > rumenz.md
入门笔记
2022/06/02
2.9K0
C#代码示例:在WinForm中创建并绑定一个DataTable
在我的一篇文章中,我解释了如何在没有数据库的情况下以web形式绑定gridview。这里,我将解释如何在没有数据库的windows窗体中绑定datagrid。
程序你好
2018/07/23
3.7K0
点击加载更多

相似问题

在JMeter中从不同线程组同步线程

11

线程过程中的线程同步问题

20

JMeter同步所有线程

13

如何同步JMeter线程组

12

如何同步JMeter线程组?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文