Skip to content

Module คืออะไร

Module คือหน่วยของโค้ดที่แยกออกมาเป็นไฟล์หรือชุดโค้ดที่สามารถนำกลับมาใช้ใหม่ได้ โดยมีขอบเขต (scope) ของตัวเอง ทำให้สามารถแบ่งโค้ดเป็นส่วนๆ จัดการได้ง่าย และป้องกันการชนกันของตัวแปรหรือฟังก์ชัน

ใน Node.js เราใช้ระบบ module เพื่อ:

  • แบ่งโค้ดเป็นส่วนๆ ที่มีหน้าที่เฉพาะ (Separation of concerns)
  • นำโค้ดกลับมาใช้ใหม่ได้ (Reusability)
  • ซ่อนรายละเอียดการทำงานภายใน (Encapsulation)
  • จัดการ dependencies ระหว่างส่วนต่างๆ ของโปรแกรม

ประเภทของ Module

ESM (แนะนำ)

ESM(ECMAScript Modules) คือมาตรฐานการ import/export module แบบใหม่ใน JavaScript และ Node.js

ถ้าเป็นไปได้ แนะนำใช้ ESM

ts
import { x } from "./x.ts";
// code
export { x };

เหตุผลที่ ESM ดีกว่านี้ CJS

คุณสมบัติESMCJS
Syntaximport/exportrequire/module.exports
Static/DynamicStatic (รู้ตั้งแต่ compile time)Dynamic (รู้ตอน runtime)
Top-level awaitรองรับไม่รองรับ
Tree shakingรองรับ (ทำให้ bundle size เล็กลง)ไม่รองรับ
Browser supportรองรับโดยตรงต้องใช้ bundler
File extensionจำเป็นต้องระบุ .jsไม่จำเป็นต้องระบุ
มาตรฐานECMAScript มาตรฐานใหม่Node.js เฉพาะ

CJS (ไม่แนะนำ)

CJS(CommonJS) คือมาตรฐานการ import/export module แบบเก่าใน Node.js

แบบเก่า ไม่แนะนำให้ใช้ ถ้าเป็นไปได้ใช้ ESM ทั้งหมด

js
const x = require("./x.js");
// code
module.exports = { x };