iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
自我挑戰組

一個月的後端學習之旅系列 第 25

【DAY25】modules(一)

  • 分享至 

  • xImage
  •  

modules

分成三種:

  1. Node.js 內建的 modules,可以直接拿來使用

內建功能尋找

  1. 我們自己製作的 modules

  2. 網路上第三方製作的 modules,可以透過 npm (node package manager)下載來使用

內建的 modules

fs.writeFile

// fs 文件系統 ile system,用來寫文件
const fs = require("fs");

// fs.writeFile(文件名稱, 要寫的內容, error function)
fs.writeFile("myFile.text", "今天天氣不錯", (e) => {
  if (e) throw e;

  console.log("文件已經撰寫完畢");
});

// modules.js -> 文件已經撰寫完畢
// 同時會產生出一個myFile.text,裡面寫 今天天氣不錯

readFile

// fs.readFile(要讀的文件名稱, encoging, call back function)
fs.readFile("myFile.text", "utf8", (e, data) => {
  if (e) throw e;

  console.log(data);
});
// modules.js -> 今天天氣不錯

錯誤的情況

fs.readFile("hgljbjk.text", "utf8", (e, data) => {
  if (e) {
    console.log(e);
  }

  console.log(data);
});
// -> Error: ENOENT: no such file or directory

Self-Made Modules

Module Wrapper 中提供的變數:

  • module變數是個物件,此物件包含此文件的內部訊息,包含id, path, exports, parent, filename等等資訊
console.log(module);

/*
{
  id 點 : '.',
  path 路徑 : 'C:\\Users\\Lo yuan\\Desktop\\Udemy全端\\JS_basics\\node_practice',
  exports 屬性 : {},
  filename: 'C:\\Users\\Lo yuan\\Desktop\\Udemy全端\\JS_basics\\node_practice\\app1.js',
  loaded: false,
  children: [],
  paths: [
    'C:\\Users\\Lo yuan\\Desktop\\Udemy全端\\JS_basics\\node_practice\\node_modules',
    'C:\\Users\\Lo yuan\\Desktop\\Udemy全端\\JS_basics\\node_modules',
   'C:\\Users\\Lo yuan\\Desktop\\Udemy全端\\node_modules',
    'C:\\Users\\Lo yuan\\Desktop\\node_modules',
    'C:\\Users\\Lo yuan\\node_modules',
    'C:\\Users\\node_modules',
    'C:\\node_modules'
  ]
}
*/
  • exports是 module 物件的屬性,本身是個 empty object {}

  • require 是一個 function,可以讀取一個 JavaScript 文件,執行該文件,然後return這個文件的 exports object

若讀取的是一個資料夾,則讀取該資料夾內的index.js文件,執行該文件,然後return這個文件的 exports object

做 Self-Made Modules 的特點,可以把功能型相同的程式碼放一起,app2 處理早晚的事情,app3 處理中午的事情,最後在 app1 用 require 去取得 exports 物價,再用它來執行程式碼

// app1
let app2 = require("./app2");
let app3 = require("./app3");

app2.morning(); // -> 早安你好
app3.lunch(); // -> 午餐時間
app2.evening(); // -> 晚安你好

//app2
function morning() {
  console.log("早安你好");
}

function evening() {
    console.log("晚安你好");
}

exports.morning = morning;
// 把 function morning() 設定到 module.exports 的 {} 裡面叫 morning 的屬性
// exports輸出
exports.evening = evening;

// app3
function lunch() {
    console.log("午餐時間");
}

exports.lunch = lunch;

下一篇文章學習modules(二)。


上一篇
【DAY24】Module Wrapper
下一篇
【DAY26】 modules(二)
系列文
一個月的後端學習之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言