iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
自我挑戰組

《轉職學習日記:JavaScript × Node.js × TypeScript × Docker × AWS ECS》系列 第 7

Day7 - 持續成長學習藍圖 - JavaScript (模組化與 NPM)

  • 分享至 

  • xImage
  •  

昨天練了非同步,今天換個主題:模組化 和 NPM 套件。
寫程式到現在,檔案慢慢變多,如果全部都塞在同一支 .js 檔案裡,會變得超亂。
所以需要學會「拆檔案」和「模組化」,再加上 NPM,可以用到別人寫好的套件,讓自己不用重造輪子。


export / import(ES Module)

在瀏覽器或 Node.js 都能用 ES6 的模組系統:

utils.js

// 宣告一個函式
export function average(arr) {
  let sum = arr.reduce((acc, n) => acc + n, 0);
  return arr.length > 0 ? sum / arr.length : 0;
}

index.js

// 匯入函式
import { average } from "./utils.js";

let scores = [80, 90, 100];
console.log("平均分數:", average(scores)); // 90

這樣就能把工具函式拆出來,讓主程式更乾淨。


Node.js 的 require / module.exports

在 Node.js(特別是舊專案)常常會看到另一套寫法:

utils.js

function average(arr) {
  let sum = arr.reduce((acc, n) => acc + n, 0);
  return arr.length > 0 ? sum / arr.length : 0;
}

module.exports = { average };

index.js

const { average } = require("./utils");

let scores = [70, 85, 95];
console.log("平均分數:", average(scores)); // 83.33...

這是 CommonJS 語法,現在新專案建議還是用 ES Module,但知道兩種都很重要。


安裝與使用 NPM 套件

NPM(Node Package Manager) 就像程式的「應用商店」。
安裝一個套件只要:

npm init -y   # 建立 package.json
npm install lodash

安裝好後就可以使用:

index.js

import _ from "lodash";

let numbers = [1, 2, 2, 3, 4, 4, 5];
let unique = _.uniq(numbers);

console.log("原始陣列:", numbers);
console.log("去除重複:", unique);

輸出:

原始陣列: [1, 2, 2, 3, 4, 4, 5]
去除重複: [1, 2, 3, 4, 5]

除了 lodash,常見的還有 axios(發 API 用)、express(建 API 伺服器),這些之後都會用到。


實作小練習:拆檔案 + 用套件

今天我把任務拆成兩個檔案:

utils.js

export function average(arr) {
  let sum = arr.reduce((acc, n) => acc + n, 0);
  return arr.length > 0 ? sum / arr.length : 0;
}
index.js
import { average } from "./utils.js";
import _ from "lodash";

let scores = [80, 80, 90, 100, 100];

console.log("平均分數:", average(scores)); // 90
console.log("去除重複後:", _.uniq(scores)); // [80, 90, 100]

🎯 學習心得 / 今日收穫

今天最大的收穫就是:程式不需要全部塞在同一個檔案。
把工具函式抽到 utils.js,在 index.js 引入,用起來清爽很多。

再加上 NPM,可以直接用到別人寫好的工具,例如 lodashuniq() 幫我處理重複值,自己就不用寫一堆迴圈。

這讓我感覺:

  • 模組化:像把房間整理成不同抽屜。
  • NPM:就像去 IKEA 買現成的收納盒,不用自己手作。

明天就要來動手做一個小作品:
讀取 JSON → 篩選 → 輸出。
感覺會是這一週的「小考驗」。💪


上一篇
Day6 - 持續成長學習藍圖 - JavaScript (非同步程式_Promise.all、Promise.race、錯誤處理)
下一篇
Day8 - 持續成長學習藍圖 - JavaScript (小作品_資料處理小工具)
系列文
《轉職學習日記:JavaScript × Node.js × TypeScript × Docker × AWS ECS》8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言