Node.js日記:模塊化

爲什麼需要模塊化

在計算機程序的開發過程中,隨着程序代碼越寫越多,在一個文件裏代碼就會越來越長,越來越不容易維護。

爲了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,這樣,每個文件包含的代碼就相對較少,很多編程語言都採用這種組織代碼的方式,這種方式就是模塊化的方式。

使用模塊有什麼好處:

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');

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章