爲什麼需要模塊化
在計算機程序的開發過程中,隨着程序代碼越寫越多,在一個文件裏代碼就會越來越長,越來越不容易維護。
爲了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,這樣,每個文件包含的代碼就相對較少,很多編程語言都採用這種組織代碼的方式,這種方式就是模塊化的方式。
使用模塊有什麼好處:
1)最大的好處是大大提高了代碼的可維護性;
2)其次,編寫代碼不必從零開始。當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程序的時候,也經常引用其他模塊,包括 Node.js 內置的模塊和來自第三方的模塊;
3)使用模塊還可以避免函數名和變量名衝突。相同名字的函數和變量完全可以分別存在不同的模塊中,因此,我們自己在編寫模塊時,不必考慮名字會與其他模塊衝突。
什麼是模塊
在 JavaScript 領域:
- 模塊是一段 JavaScript 代碼,具有統一的基本書寫格式。
- 模塊之間通過基本交互規則,能彼此引用,協同工作。
模塊化規範
對書寫格式和交互規則的詳細描述,就是模塊定義規範(Module Definition Specification):
- AMD 規範:Require.js
- CMD 規範:Sea.js
- CommonJS 的 Modules 規範:Node.js
模塊
模塊是 Node.js 應用程序的基本組成部分,文件和模塊是一一對應的。
換言之,一個 Node.js 文件就是一個模塊,這個文件可能是 JavaScript 代碼、JSON 或者編譯過的 C/C++ 擴展。
在 Node.js 中,當每個 JavaScript 文件在執行或被 require 的時候,Node.js 其實創建了一個新的實例 var module = new Module(),這個實例名叫 module。
這也是沒有定義 module 這個變量,卻能 console.log 出來而不會報錯的原因。
而這個實例中有個 exports 屬性默認是空對象,而這個屬性裏面的值就是該模塊被導出的的東西。
其他模塊要使用這些導出的東西,就得使用 require 導入。
代碼舉例:
exports = module.exports = {};
模塊化使用
自定義模塊(導出和導入)的方式使用模塊。
1)方式 1
導出:
// sum.js
var sum = function(a, b){
return parseInt(a) + parseInt(b);
}
// 導出模塊 等價於 module.exports.sum = sum
exports.sum = sum;
導入:
// main.js
// 導入模塊
const m = require('./03.sum.js');
console.log(m.sum(1, 2));
2)方式 2
導出:
// sum.js
global.sum = function(a, b){
return parseInt(a) + parseInt(b);
}
導入:
// main.js
require('./03.sum.js');
console.log(global.sum(5, 6));
模塊細節
- 已經加載的模塊會被緩存,已提高加載性能,根據加載的路徑來判斷是否加載過。
- 加載文件的後綴 `.js` 可以省略。模塊文件常見結尾後綴有 `.js`、`.json`、`.node`,注意若省略後綴,若在同一個目錄中出現文件名相同後綴名不同的話,加載的順序如下:
.js .json .node
常用系統內置模塊
- fs:文件操作
- http:網絡操作
- path:路徑操作
- querystring:查詢參數解析
- url:url 解析
代碼舉例:
const fs = require("fs");
const http = require('http');
const path = require('path');
const querystring = require('querystring');
const url = require('url');