node.js當中模塊化開發的基本流程及require加載文件的規則

1、模塊的分類

一、文件模塊

即本身寫的功能模塊文件,一個js文件即表明一個自定義的文件模塊。node

const calc = require('./modules/calculator.js');
二、核心模塊

Node平臺自帶一套基本的功能模塊,也有人稱之爲Node平臺的API。mysql

const path = require('path');
const fs = require('fs');
三、第三方模塊

社區或第三方開發的功能模塊,這種模塊在Node自己沒有,須要經過NPM的方式下載以後再引入。好比要操做mysql數據庫,則須要引入mysql這個模塊。c++

const express = require('express');

2、模塊化開發的基本流程

一、建立模塊

即建立一個js文件,由於一個模塊一般對應着一個js文件。能夠在該文件當中封裝幾個內部函數,以下所示。sql

Node採用的模塊化結構遵循CommonJS規範。模塊與文件是一一對應的,加載一個模塊實際上就是加載一個js模塊文件。數據庫

圖片描述

二、導出模塊成員

在模塊文件內部用module.exports = {};來導出成員。以下所示。express

圖片描述

可使用ES6當中的「自動屬性」的語法,則上述導出成員的代碼能夠用 module.exports = {add,subtract};來代替。在調用時,使用「模塊名.add」即表明這個模塊文件當中的add這個屬性值所對應函數。json

三、載入模塊

使用相對路徑,用require的方式來載入在自定義的模塊文件。模塊化

圖片描述

四、使用模塊

圖片描述

3、require加載文件的規則

一、當require當中的參數字符串以./(從當前目錄出發)或../(從上一級目錄出發)開頭:表示按照相對路徑,從當前文件所在的文件夾開始尋找要載入的模塊文件。函數

圖片描述

二、當require當中的參數字符串以/開頭:則表示從系統根目錄開始尋找該模塊文件。ui

三、若是參數字符串不以.//../開頭,說明要加載的不是一個文件,而是一個默認提供的核心模塊。此時則先在node平臺所提供的核心模塊當中找,而後再尋找NPM模塊(即第三方模塊包,或本身寫的模塊包)。在尋找NPM模塊包時,會從當前目錄出發,向上搜索各級當中的node_modules文件夾當中的文件,但如有兩個同名文件,則遵循就近原則。

一、node的系統模塊的優先級最高,一旦有第三方模塊包與系統模塊重名,則以系統模塊爲準。
二、以前在使用require的方式來加載一個文件時,若是該文件在當前目錄當中,則參數字符串當中必須以./開頭,不能直接寫文件名。若在參數字符串當中直接寫文件名,則表明載入的是一個模塊包,模塊包必須放在一個特定名字的文件夾當中,即node_modules

四、使用require來加載文件時能夠省略擴展名。好比require('./module'),則對應的加載順序爲,

  1. 按js文件來執行(先找對應路徑當中的module.js文件來加載)
  2. 按json文件來解析(若上面的js文件找不到時,則找對應路徑當中的module.json文件來加載)
  3. 按照預編譯好的c++模塊來執行(尋找對應路徑當中的module.node文件來加載)
  4. 若參數字符串爲一個目錄(文件夾)的路徑,則自動先查找該文件夾下的package.json文件,而後再再加載該文件當中main字段所指定的入口文件。(若package.json文件當中沒有main字段,或者根本沒有package.json文件,則再默認查找該文件夾下的index.js文件做爲模塊來載入。)

圖片描述

圖片描述

相關文章
相關標籤/搜索