iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
自我挑戰組

學習NodeJS的30天系列 第 3

Day3 NodeJS-Module、Exports與Require

今天要談三個NodeJS的概念,進入新手村的第一個任務:Module、Exports與Require。因為在使用JavaScript開發網頁時沒有Module概念,加入Module的概念讓NodeJS內建許多常用、通用的功能可以被開發人員引入程式碼,省去許多程式碼的撰寫時間,開發人員也可自創Module以提升開發效率。

Module

第一個NodeJS的重要概念是Module。在Module出現之前,JavaScript雖然可以在前端以<script>標籤引入其他程式碼,但Module讓JavaScript在後端也具有引入其他程式碼的機制,例如:C#的類別(class)、python的import機制。Module用於存放可以重複使用的程式碼,將程式碼分門別類、以獨立的JavaScript檔儲存,可以避免不經意的程式碼衝突,在Module中存在一個代表Module本身的module物件,藉由其中的exports屬性,配合require語法,將程式碼以更靈活的架構建置。

Exports

exports作為一個物件,是源於module的屬性module.exportsmodule.exports以pass by reference的方式將屬性傳遞給exports物件,再將Module中的方法掛載到exports上輸出,exports也是Module中唯一可以輸出的窗口。

Require

require()是NodeJS中用來引用Module的函式,透過引入外部Module便可應用其指派於exports的方法。

Module實作 - 計算鐵人賽進行天數

  1. 建立計算天數的程式碼為Module,將主要輸出的函式掛載於exports上,Module的部分就準備完成。
// count.js
exports.count = function(dMonth, dDay){
    let date = new Date();
    let dDate = new Date(2021,dMonth-1,dDay);
    let diff = Math.floor(Math.abs(date-dDate)/(1000 * 3600 * 24))+1;

    console.log(`iT鐵人賽第 ${diff} 天!`);
}
  1. 在主程式部份,使用require()將count Module引入為Count物件,require()的參數是Module的檔案名稱,在沒有輸入副檔名的情況下,預設副檔名為.js,若引入的Module為NodeJS內建,不需含有前綴路徑./
let Count = require("./count");
Count.count(9,16);
  1. 執行主程式輸出成果。

https://ithelp.ithome.com.tw/upload/images/20210918/20139980uzpmKXUtWa.png

小結

Module的機制讓JavaScript更容易應用在後端開發上,透過Module設計程式碼架構,可以提高程式的利用率~

以上是今天的小練習,明天繼續努力!

參考資料:

深入淺出Node.js/朴靈 編著

Learn and Understand NodeJS [課程]


上一篇
Day2 Visual Studio Code 安裝與設定
下一篇
Day4 JS-Object、Prototype與Class(ES6)
系列文
學習NodeJS的30天30

尚未有邦友留言

立即登入留言