簡體   English   中英

節點中的節點模塊包裝器功能意味着什么

[英]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,包含模塊的絕對文件名和目錄路徑。

本質上,此包裝器用於配置模塊,並且可以使用變量exportsrequiremodule__filename__dirname

編輯

OP還提到了processglobal變量。

  • process對象提供有關當前Node.js流程的信息,並對其進行控制。
    • 它發出諸如exituncaughtException事件來管理Node進程。
    • 它還包括諸如process.abort()函數來結束當前進程。
    • 要查看所有信息,請參閱正在processNode文檔。
  • global提供了用於訪問和設置全局變量的系統。
    • 例如,如果您在一個模塊中執行global.something = true ,則在另一個模塊中可以訪問something而這將是true (無需導出)。
    • Node 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];
});

如果您編寫一些代碼,例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM