2014年7月12日 星期六

NodeJS 教學 - Module System

在 NodeJS 教學 - NPM 介紹(1) 文章中介紹了 NodeJS 中的 NPM,能夠幫助開發者下載

安裝與管理第三方的模組(Modules),接下來就介紹一下當你透過 NPM 下載下來一個模組之後

要如何使用它以及如和自己建立一個模組

首先我們來探討一下如何使用一個模組,在你透過 npm install 之後會將該模組下載到

root 底下的 node_modules 資料夾內,而當你在程式內要使用該模組時,我們可以用 require 函式來達成

require 函式接受一個字串的參數,該字串參數指明了你想要載入(loading)的模組

而該模組可以是一個 Core module (例如:http)或是透過 NPM 安裝的第三方模組甚至是你自己的模組!!

1. 我舉一個 Core module 的例子

在 command line 輸入 node 進入 NodeJS 的命令列模式


並輸入以下指令

var http = require("http");
console.log(http);         

應該會看到類似下圖的結果



因為我最後用 console 把 http 物件打印出來,所以可以觀察到整個 http 模組的變數甚至式函式

這就是一個最簡單的載入 Core Module 的過程

2. 如果你要載入的模組是透過 NPM 安裝的話,就可能必須要注意一下路徑問題

require 函式接受的字串參數,也可以是一個相對路徑或是絕對路徑

例如(以 windows 為例):

var express = require("/some/path/express");
var express = require("C:/some/path/express");
var express = require("C:\\some\\path\\express");

以第一個範例為例,NodeJS 會先搜尋 /some/path/node_modules 底下是否有 express 模組

如果沒有則會退回到上一層,/some/node_modules 去找 express,

如果還是找不到最後才會退到跟目錄去搜尋,最後如果還是沒搜尋到

就會拋出 Cannot find module 的錯誤訊息了!!

3. 接下來介紹一下如果開發者想要自己建立一個模組的話,該怎麼做呢

首先當然就是用 Javascript 建立一個屬於自己的模組囉

如下圖的程式範例:




我建立了一個 HelloWord 的模組,並對外公開 say 與 echo 這兩個函式

最後利用 module.exports = HelloWorld 來告訴 NodeJS,我要註冊這個 HelloWorld 模組

完成之後將這個 js 命名為 hello.js,並在當前目錄下

在 command line 輸入 node 進入 NodeJS 的命令列模式

並輸入如下的 command 以觀察結果


如上圖,透過 require 函式載入 hello.js 模組,你也可以不用加上.js 副檔名,NodeJS 會自動幫你加上

例如 var helloModule = require("./hello");

最後再說明一個 NodeJS Module System 的一個特性就是 Caching Modules

也就是說當第一次呼叫 require("./hello") 之後,只要再有任何一次需要載入該模組

其實都是回傳相同一個模組或是物件!!

沒有留言:

張貼留言