Dark mode
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
คุณสมบัติ | ESM | CJS |
---|---|---|
Syntax | import /export | require /module.exports |
Static/Dynamic | Static (รู้ตั้งแต่ 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 };