“节点模块包装函数”在节点中意味着什么?

新手上路,请多包涵

我想知道“模块包装函数”是什么意思以及它对我的代码有什么作用。

 (function (exports, require, module, __filename, __dirname) {


 });

原文由 yasiru 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 252
1 个回答

原始答案

根据 Node.js 文档

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

>  (function(exports, require, module, __filename, __dirname) {
>     // Module code actually lives in here
> });
>
> ```
>
> 通过这样做,Node.js 实现了一些事情:
>
> - 它将顶级变量(用 var、const 或 let 定义)的范围限制在模块而不是全局对象中。
> - 它有助于提供一些实际上特定于模块的全局变量,例如:
>   - 模块和导出对象,实现者可以使用这些对象从模块中导出值。
>   - 便利变量 __filename 和 __dirname,包含模块的绝对文件名和目录路径。

Essentially, this wrapper is used to configure your module, and it **enables the use of the variables `exports` , `require` , `module` , `__filename` , 和 `__dirname` 。**

## 编辑

OP 还提到了 `process` 和 `global` 变量。

- **`process` 对象提供有关当前 Node.js 进程的信息和控制权。**
  - 它发出诸如 `exit` 和 `uncaughtException` 之类的事件来管理节点进程。
  - 它还包括诸如 `process.abort()` 结束当前进程的功能。
  - 要查看所有信息,请参阅 [节点文档 `process`](https://nodejs.org/api/process.html)
- **`global` 提供了一个访问和设置全局变量的系统。**
  - 例如,如果您在一个模块中执行 `global.something = true` ,则在另一个模块中您可以访问 `something` 它将是 `true` (无需导出)。
  - 在 [Node `global` 文档](https://nodejs.org/api/globals.html#globals_global) 中阅读更多内容。

## 编辑 2

您也可以编辑包装器:

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]; });

”`

原文由 Marco 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题