[英]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
可以訪問兩個circumference
& area
通過要求geometry.js
在circle.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.