如何更改 NodeJS 模块包装器?
Module Wrapper 函数:在底层,NodeJS 不直接运行我们的代码,它在执行之前将整个代码包装在一个函数。这个函数被称为 Module Wrapper 函数。有关官方文档,请参阅 https://nodejs.org/api/modules.html#modules_the_module_wrapper。
在执行模块代码之前,NodeJS 使用具有以下结构的函数包装器对其进行包装:
(function (exports, require, module, __filename, __dirname) {
//module code
});
NodeJS中Module Wrapper函数的使用:
- 用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