即本身寫的功能模塊文件,一個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');
即建立一個js文件,由於一個模塊一般對應着一個js文件。能夠在該文件當中封裝幾個內部函數,以下所示。sql
Node採用的模塊化結構遵循CommonJS規範。模塊與文件是一一對應的,加載一個模塊實際上就是加載一個js模塊文件。數據庫
在模塊文件內部用module.exports = {};
來導出成員。以下所示。express
可使用ES6當中的「自動屬性」的語法,則上述導出成員的代碼能夠用
module.exports = {add,subtract};
來代替。在調用時,使用「模塊名.add」即表明這個模塊文件當中的add這個屬性值所對應函數。json
使用相對路徑,用require的方式來載入在自定義的模塊文件。模塊化
一、當require當中的參數字符串以./
(從當前目錄出發)或../
(從上一級目錄出發)開頭:表示按照相對路徑,從當前文件所在的文件夾開始尋找要載入的模塊文件。函數
二、當require當中的參數字符串以/
開頭:則表示從系統根目錄開始尋找該模塊文件。ui
三、若是參數字符串不以./
或/
或../
開頭,說明要加載的不是一個文件,而是一個默認提供的核心模塊。此時則先在node平臺所提供的核心模塊當中找,而後再尋找NPM模塊(即第三方模塊包,或本身寫的模塊包)。在尋找NPM模塊包時,會從當前目錄出發,向上搜索各級當中的node_modules
文件夾當中的文件,但如有兩個同名文件,則遵循就近原則。
一、node的系統模塊的優先級最高,一旦有第三方模塊包與系統模塊重名,則以系統模塊爲準。
二、以前在使用require的方式來加載一個文件時,若是該文件在當前目錄當中,則參數字符串當中必須以./
開頭,不能直接寫文件名。若在參數字符串當中直接寫文件名,則表明載入的是一個模塊包,模塊包必須放在一個特定名字的文件夾當中,即node_modules
。
四、使用require來加載文件時能夠省略擴展名。好比require('./module')
,則對應的加載順序爲,
module.js
文件來加載)module.json
文件來加載)module.node
文件來加載)package.json
文件,而後再再加載該文件當中main字段所指定的入口文件。(若package.json
文件當中沒有main
字段,或者根本沒有package.json
文件,則再默認查找該文件夾下的index.js
文件做爲模塊來載入。)