โมดูล path ในตัว สร้างและจัดการเส้นทางไฟล์ อย่างถูกต้องในระบบปฏิบัติการต่างๆกรร การเชื่อมต่อสตริงเส้นทางด้วย / ด้วยตนเองจะล้มเหลวบน Windows (ซึ่งใช้ \) และจัดการกรณีขอบเขตไม่ถูกต้อง — path จัดการทั้งหมดได้อย่างเชื่อถือได้
// ❌ fragile, OS-dependent, error-prone
const filePath = baseDir + "/" + "sub" + "/" + fileName;
// breaks on Windows (\), doubles slashes if baseDir ends in /, etc.
import path from "path";
// ✅ uses the correct separator for the OS, normalizes slashes
const filePath = path.join(baseDir, "sub", fileName);
// Linux/Mac: baseDir/sub/file.txt Windows: baseDir\sub\file.txt
path.join แทรกตัวคั่นที่ถูกต้อง ลดอักเสบ/ขีดหลังแบบซ้ำซ้อน และแก้ไขส่วน ../.
path.resolve("src", "app.js"); // → ABSOLUTE path from the cwd
path.basename("/a/b/file.txt"); // "file.txt"
path.dirname("/a/b/file.txt"); // "/a/b"
path.extname("file.txt"); // ".txt"
path.parse("/a/b/file.txt"); // { dir, base, name, ext }
path.sep; // "/" or "\" depending on OS
// CommonJS — built-in globals
const configPath = path.join(__dirname, "config.json");
// ES Modules — __dirname doesn't exist; derive it from import.meta.url
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
การสร้างเส้นทางที่สัมพันธ์กับไฟล์ปัจจุบัน (ด้วย __dirname หรือเทียบเท่า ESM) เป็นวิธีปลอดภัยในการอ้างอิงไฟล์ — ไม่ว่ากระบวนการจะเริ่มจากที่ใด
path.join → just joins segments (relative stays relative)
path.resolve → produces an ABSOLUTE path (resolves from cwd / right-to-left)
การใช้ path แทนการเชื่อมต่อสตริงทำให้โค้ดการจัดการไฟล์ ข้ามแพลตฟอร์มและมีความแข็งแกร่ง — แหล่งข้อบกพร่องที่พบบ่อยเมื่อโค้ดที่เขียนบน Mac/Linux ล้มเหลวบน Windows หรือเมื่อการเชื่อมต่อสร้างเส้นทางที่ไม่ถูกต้อง
นี่เป็นนิสัยเล็กน้อยที่มีประโยชน์ด้านความน่าเชื่อถือที่มากมาย และการรู้ join vs resolve บวกกับวิธีรับ __dirname ใน ESM ครอบคลุมความต้องการเส้นทางในแต่ละวันในโปรเจ็กต์ Node ใดๆ ที่ใช้ระบบไฟล์