nodejs 之 module (模塊模塊)

1.什么是module;##

Node.js 有一個簡單的模塊加載系統(tǒng)。 在 Node.js 中,文件和模塊是一一對應(yīng)的(每個文件被視為一個獨立的模塊)。
舉例
1.js文件代碼如下:

const circle = require('./2.js');
console.log(`半徑為 4 的圓的面積是 ${circle.area(4)}`);

在第一行中,1.js 加載了同一目錄下的 2.js 模塊。

2.js文件代碼如下:

const PI = Math.PI;

exports.area = (r) => PI * r * r;

exports.circumference = (r) => 2 * PI * r;

我們執(zhí)行node 1.js,控制臺運行顯示:

Paste_Image.png

2.js 模塊導(dǎo)出了 area() 和 circumference() 兩個函數(shù)。 要想添加函數(shù)和對象到模塊根,可以將它們添加到特殊的 exports 對象。
模塊內(nèi)的本地變量是私有的,在這個例子中,變量 PI是 2.js私有的。

如果希望模塊根導(dǎo)出為一個函數(shù)(比如構(gòu)造函數(shù))或一次導(dǎo)出一個完整的對象而不是每次都創(chuàng)建一個屬性,可以把它賦值給 module.exports 而不是 exports。

那么1.js 改寫成:

const square = require('./square.js');
var mySquare = square(2);
console.log(`正方形的面積是 ${mySquare.area()}`);

那么2.js 改寫成:

module.exports = (width) => {
  return {
    area: () => width * width
  };
}

2.訪問主模塊##

當(dāng) Node.js 直接運行一個文件時,require.main 會被設(shè)為它的 module。 這意味著你可以通過如下檢測直接確定一個文件是否已運行:

require.main === module

對于1.js 文件,如果通過 node 1.js 運行則為 true,但如果通過 require('./2.js') 運行則為 false。

因為 module 提供了一個 filename 屬性(通常等同于 __filename),所以可以通過檢查 require.main.filename 來獲取當(dāng)前應(yīng)用程序的入口點。

核心模塊##

Node.js 有些模塊會被編譯成二進(jìn)制。 這些模塊別的地方有更詳細(xì)的描述。核心模塊定義在 Node.js 源代碼的 lib/目錄下。require()總是會優(yōu)先加載核心模塊。 例如,require('http')始終返回內(nèi)置的 HTTP 模塊,即使有同名文件。

文件模塊##

如果按確切的文件名沒有找到模塊,則 Node.js 會嘗試帶上 .js、.json
或 .node 拓展名再加載。

.js文件會被解析為 JavaScript 文本文件,.json文件會被解析為 JSON 文本文件。 .node文件會被解析為通過 dlopen加載的編譯后的插件模塊。以 '/' 為前綴的模塊是文件的絕對路徑。 例如require('/home/marco/foo.js')會加載 /home/marco/foo.js文件。
以 './'為前綴的模塊是相對于調(diào)用 require()的文件的。 也就是說,circle.js必須和 foo.js在同一目錄下以便于 require('./circle')找到它。

當(dāng)沒有以 '/'、'./'或 '../'開頭來表示文件時,這個模塊必須是一個核心模塊或加載自 node_modules 目錄。如果給定的路徑不存在,則 require() 會拋出一個 code屬性為 'MODULE_NOT_FOUND'的 Error。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 模塊 Node 有簡單的模塊加載系統(tǒng)。在 Node 里,文件和模塊是一一對應(yīng)的。下面例子里,foo.js加載同一個...
    保川閱讀 691評論 0 0
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,244評論 0 1
  • Node.js是目前非?;馃岬募夹g(shù),但是它的誕生經(jīng)歷卻很奇特。 眾所周知,在Netscape設(shè)計出JavaScri...
    w_zhuan閱讀 3,736評論 2 41
  • 最近經(jīng)常泡圖書館,安靜的環(huán)境,突然感覺到了自己的存在,有了寶寶的這一年多,好像生活總是圍著寶寶轉(zhuǎn),衣食起居,啟蒙早...
    飛兒_6a84閱讀 208評論 0 0
  • 作業(yè)一、搜圖配文案 作業(yè)二、對齊功能 作業(yè)三、圖片裁剪+蒙版 作業(yè)四、文字創(chuàng)意化設(shè)計
    S陽陽陽陽陽陽閱讀 443評論 2 0

友情鏈接更多精彩內(nèi)容