Commonjs規範與模組化

間陽幕賓發表於2019-02-16

在之前的學習中我們使用require()來引入我們需要的包,這其實就是模組化,各模組相互獨立,可以通過某種方式引入別的模組。而這些引入方式都是遵循一定的規範的,這就是CommonJS規範。

一、Commonjs規範

目前JS標準定義的API是為了構建基於瀏覽器的應用程式,沒有制定一個用於更廣泛的應用程式的標準庫。CommonJS規範致力於提供一個類似java、python等語言的標準庫,使JS可以開發伺服器端應用程式、命令列工具、桌面圖形介面應用程式

二、Nodejs中的模組化

Node應用程式由各種模組組成,採用CommomJS模組規範。

1、模組分類

Nodejs中模組分為兩類,一類是由Node提供的核心模組;另一類是由使用者編寫的檔案模組。

核心模組

核心模組在Node原始碼的編譯過程中被編譯進了二進位制檔案。在Node程式啟動時,核心模組會被直接載入進記憶體,所以在引入這些核心模組時,檔案定位和編譯執行這兩步可以省略。並且在路徑分析中優先判斷,所以它的載入速度是最快的。HTTP模組、URL模組、fs模組都是Node內建的核心模組,可以直接引用。

檔案模組

檔案模組則是在執行時動態載入,需要完整的路徑分析、檔案定位、編譯執行過程,速度相比核心模組稍微慢一些,但是用處非常多。這些模組需要我們自己定義,下面我們來看一下自定義模組。

2、自定義模組

我們把公共的功能抽成一個單獨的js檔案作為一個模組,預設情況下外部是無法訪問這個模組裡的方法或者屬性。如果想讓外部訪問模組內的屬性和方法,必須在模組裡通過exports或者module.exports暴露需要被外部訪問的屬性和方法。

在需要使用這些模組的檔案中通過require引入該模組。這樣就可以使用這個模組裡暴露的屬性和方法。

定義模組,暴露屬性或方法

//tools.js

var tools = {
    name:`Node`
    sayHello:function () {
        return `Hello NodeJs`;
    }
}

//暴露屬性或方法
//module.exports = tools;
    
exports.add = tools.name;
exports.sayHello = tools.sayHello;

在別的檔案裡引入模組

//引入自定義模組
var tools = require(`./tools`);

//使用該模組裡暴露的方法
tools.name;            //  Node
tools.sayHello();      //  Hello NodeJs

3、第三方模組

Nodejs中也可以使用第三方模組,Nodejs中第三方模組由包組成,包又包含若干模組,通過包來對一組具有相互依賴關係的模組進行統一管理。

完全符合CommonJs規範的包目錄一般包含如下這些檔案:

  • package.json:包描述檔案
  • bin:用於存放可執行二進位制檔案的目錄
  • lib:用於存放Javascript程式碼的目錄
  • doc:用於存放文件的目錄

我們使用npm安裝第三方模組

npm install silly-datetime -Save

安裝完npm後我們就可以使用這個包了:

var sd = require(`silly-datetime`);
sd.format(new Date(),`YYYY-MM-DD-HH:mm`);

三、npm

1、什麼是npm

npm全稱Node Package Manager,是Node.js的包管理器。可以使用它在Node.js應用程式中建立、共享和重用模組。

模組就是可重用的程式碼庫。比如用來與資料庫互動的模組、支援web開發的模組以及通過web套接字協助通訊的模組。

2、使用npm安裝模組

安裝模組有兩種方式:本地安裝、全域性安裝

本地安裝

本地安裝模組意味著模組會被安裝在專案內名為node_modules的資料夾中,而且它只可以在該專案中使用。這是推薦的安裝方式。

使用下列命令開始安裝模組:

npm install [module_name]

這個命令意思是向伺服器傳送一個請求,將該模組的最新版本下載到計算機上。當模組下載成功後會有下列語句輸出:

module_name@1.2.0 ./node_modules/module_name

這行輸出告訴我們模組的名稱、版本以及下載的位置。

全域性安裝

全域性安裝意味著該模組可在系統的任意地方使用。其他與本地安裝一致。與本地安裝稍有不同的是全域性安裝需要加上-g:

npm install [module_name] -g

3、使用模組

要在Node.js應用程式中使用模組,必須將其引入應用程式中,引入方法如下:

var module = require(`module`);

我們把它賦值給一個變數,以便於在以後使用這個模組。

4、查詢模組文件

有時候我們需要檢視模組文件,可以使用一下命令:

npm docs [module_name]

這個命令必須在Node.js專案資料夾的根目錄下執行,並且該模組已經下載到了node_modules資料夾下。

5、使用package.json指定依賴關係(dependency)

npm允許開發人員使用package.json檔案來指定在應用程式中要使用的模組,並且通過單個命令來安裝它們:

npm install

這樣做的好處有下列三點:

  • 無需一個個安裝模組
  • 其他開發人員可以容易的安裝你的應用程式
  • 應用程式的依賴儲存在單一的地方

一個最小的package.json檔案是這樣的:

{
    "name":"example1",
    "version":"0.0.1",
    "dependencies":{
        "underscore":"~1.2.1"
    }
}

相關文章