我想知道,模块包装器函数是什么意思,它对我的代码有什么作用?
(function (exports, require, module, __filename, __dirname) {
});
发布于 2018-07-15 15:55:22
原始答案
在模块代码执行之前,Node.js将使用如下所示的函数包装器对其进行包装:
(函数(exports,require,module,__filename,__dirname) { //模块代码实际在这里});
通过这样做,Node.js实现了以下几点:
的方便变量
本质上,此包装器用于配置模块,并允许使用变量exports
**,** require
**,** module
**,** __filename
**,**__filename
**,** __dirname
**.**
编辑
OP还提到了process
和global
变量。
process
object提供关于当前节点进程的信息以及对当前节点进程的控制。exit
和uncaughtException
之类的事件来管理节点进程。process.abort()
之类的函数来结束当前进程。process
global
提供了一个用于访问和设置全局变量的系统。例如,如果您在一个模块中执行global.something = true
,那么在另一个模块中,您可以访问something
,它将是true
(而不必导出它)。global
documentation.上阅读更多信息
编辑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];
});
发布于 2018-10-16 14:36:10
我想,我在这篇文章中有点晚了,但我想在这里分享我的2点看法。
因此,您编写的表达式是IIFE (立即调用的函数表达式)。
基本上,(Node)文件中的代码被包装在这个特定的函数中。当有人需要此文件时,someone会自动运行,并为您提供module.exports、exports、__dirname、__filename等对象。
这些对象不是全局的,而是模块(文件)的本地对象。这些都是通过这个IIFE函数提供的。使用此对象可以导出您的模块。
文档的链接已经在上面的答案中提供了,这应该会有帮助。
发布于 2018-07-15 15:55:57
如果你写了一些代码,例如:
const fs = require("fs");
module.exports = fs.readFileSync(__dirname + "test.txt");
process.exit();
然后,您将使用大量未通过js规范定义的全局变量,它们仅在node中可用。为了使它们对代码可用,您执行的代码将包含在您引用的函数中,该函数允许您访问它们。他们也可以写一些C++代码来解决这个问题,但那会复杂得多。
https://stackoverflow.com/questions/51349900
复制相似问题