簡體   English   中英

了解Node.js中的模塊

[英]Understanding modules in Node.js

我剛剛開始閱讀有關Node.js的文章,有一件事,我覺得很難理解,所以想對您有所幫助! :)

尤其是,

var PI = Math.PI;

exports.area = function (r) {
  return PI * r * r;
};

exports.circumference = function (r) {
  return 2 * PI * r;
};

對此的解釋是:

此代碼創建一個PI變量,該變量只能由模塊中包含的代碼訪問; 在模塊外部無法訪問。 接下來,在導出對象上創建兩個函數。 這些功能可在模塊外部訪問,因為它們是在導出對象上定義的。 因此,可以完全保護PI免受外界干擾。 因此,您可以放心,area()和圓周()始終會保持應有的狀態(只要為r參數提供了一個值)。

現在,我感到非常困惑的是它們在“模塊內”和“模塊外”的含義。 到目前為止,我已經了解到模塊本質上就是我們所說的封裝,對嗎?

考慮到這一點,當他們提到:

此代碼創建一個PI變量,該變量只能由模塊中包含的代碼訪問; 在模塊外部無法訪問。

..它們是否意味着PI扮演着所謂的全局變量的角色? 另外,如果PI是全局變量,那么為什么呢:

PI受到完全保護

不受外界干擾。

謝謝!

當您說module.exports ,您使這些變量/函數可用於對代碼文件有require任何文件。 PI無法用於外部干擾的原因是因為您沒有像這樣將PI分配給module.exports對象:

module.exports.PI = PI;

因此,如果您的代碼位於名為geometry.js的文件geometry.js並且在同一目錄中還有另一個名為circle.js的文件,那么請進一步執行此步驟。 circle.js可以訪問兩個circumferencearea通過要求geometry.jscircle.js這樣:

// circle.js
var geometry = require('geometry.js');

console.log(geometry.area(2));
console.log(geometry.circumference(2));

本質上,如果未將變量添加到module.exports對象,則該變量在文件中是本地的;如果將其添加到module.exports對象,則該module.exports可用於在require語句中實現代碼的任何其他代碼。

這是對模塊的很好解釋,以及Mixu的Node Book中的示例

摘自Mixu的Node Book第8章

模塊對於在Node中構建應用程序至關重要,因為它們允許您包含外部庫(例如數據庫訪問庫),並且它們有助於將代碼組織成責任有限的單獨部分。 您應該嘗試在自己的代碼中標識可重用的部分,並將它們轉換為單獨的模塊,以減少每個文件的代碼量,並使其更易於閱讀和維護代碼。

我認為答案在包含您發布的代碼的開頭段落中有所揭示

var myModule = require('./myModule.js');

模塊是封裝的代碼段。 模塊中的代碼大部分是私有的,這意味着它們中定義的函數和變量只能從模塊內部訪問。 但是,您可以公開要在模塊外部使用的函數和/或變量。

您發布的代碼將是myModule PI將在該模塊內部,並且只能從該模塊內部訪問。

首先在require位置執行第一行,然后從模塊外部執行myModule.area() 但是您不能執行myModule.PI ,因為它是該模塊的本地模塊,因此除非您編寫一些內容來export它,否則無法訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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