首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >node中的node模块包装器函数是什么意思

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

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

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

代码语言:javascript
运行
复制
(function (exports, require, module, __filename, __dirname) {  


 });
EN

回答 3

Stack Overflow用户

发布于 2018-07-15 23: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
运行
复制
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 22:36:10

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

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

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

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

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

票数 2
EN

Stack Overflow用户

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

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

代码语言:javascript
运行
复制
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

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档