如何更改 Node.js 模块包装器?
模块包装函数:在底层,NodeJS 并不直接运行我们的代码,它在执行之前将整个代码包装在一个函数中。这个函数被称为 Module Wrapper 函数。有关官方文档,请参阅 https://nodejs.org/api/modules.html#modules_the_module_wrapper。
在执行模块的代码之前,NodeJS 使用具有以下结构的函数包装器来包装它:
(function (exports, require, module, __filename, __dirname) {
//module code
});
NodeJS中模块包装函数的使用:
- 用var 、 const或let声明的顶级变量的作用域是模块而不是全局对象。
- 它提供了一些特定于模块的全局变量,例如:
- 可用于从模块中导出值的模块和导出对象。
- 像__filename和__dirname这样的变量告诉我们模块的绝对文件名和它的目录路径。
修改模块包装函数:考虑我们有两个文件, main.js和module.js 。在 main.js 中,我们覆盖Module.wrap函数以便 console.log('modifedMWF');每次需要一个模块。现在,如果我们需要module.js,它会包含一条消息来确认我们的修改是否成功。
- 这是将调用第二个的第一个文件。
main.js
var Module = require("module"); (function (moduleWrapCopy) { Module.wrap = function (script) { script = "console.log('modifiedMWF');" + script; return moduleWrapCopy(script); }; })(Module.wrap); require("./module.js");
module.js
console.log("Hello Geeks from module.js!");
- 这是第二个文件。
模块.js
console.log("Hello Geeks from module.js!");
输出:运行main.js,我们得到以下输出,证实了我们对Module Wrapper 函数的成功更改。
node main.js