[英]What does mean by node module wrapper function in node
我想知道,模塊包裝函數是什么意思,它對我的代碼有什么作用?
(function (exports, require, module, __filename, __dirname) {
});
根據Node.js文檔 ,
在執行模塊的代碼之前,Node.js將使用類似於以下內容的函數包裝器將其包裝:
(function(exports, require, module, __filename, __dirname) { // Module code actually lives in here });
通過這樣做,Node.js實現了一些目的:
- 它使頂級變量(用var,const或let定義)的作用域限定於模塊而不是全局對象。
- 它有助於提供一些實際上特定於模塊的全局變量,例如:
- 模塊和導出對象,實現者可以使用這些對象從模塊中導出值。
- 便利變量__filename和__dirname,包含模塊的絕對文件名和目錄路徑。
本質上,此包裝器用於配置模塊,並且可以使用變量exports
, require
, module
, __filename
和__dirname
。
OP還提到了process
和global
變量。
process
對象提供有關當前Node.js流程的信息,並對其進行控制。
global
提供了用於訪問和設置全局變量的系統。
global.something = true
,則在另一個模塊中可以訪問something
而這將是true
(無需導出)。 global
文檔中了解更多信息 。 您也可以編輯包裝器:
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];
});
如果您編寫一些代碼,例如:
const fs = require("fs");
module.exports = fs.readFileSync(__dirname + "test.txt");
process.exit();
然后,您將處理許多未通過js規范定義的全局變量,它們僅在node中可用。 為了使它們可用於代碼,所執行的代碼包含在引用的函數中,該函數使您可以訪問它們。 他們也可以編寫一些C ++代碼來解決該問題,但這要復雜得多。
我認為,我在這篇文章上的發言並不遲,但我想在這里分享我的2美分。
因此,您編寫的表達式是IIFE (立即調用函數表達式)。
基本上,(節點)文件中的代碼包裝在此特定函數內。 當有人需要此文件時,IIFE會自動運行並為您提供諸如module.exports,exports,__ dirname,__ filename之類的對象。
這些對象不是全局的,而是模塊(文件)的本地對象。 這些可以通過此IIFE功能使用。 使用此對象可以導出您的模塊。
上面的答案中已經提供了指向文檔的鏈接,應該會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.