Skip to content

File System (fs) Module กับ CLI

ทำไมต้องใช้ fs กับ CLI?

เวลาสร้าง CLI tool ที่ต้องอ่าน/เขียนไฟล์ เช่น config, log, หรือผลลัพธ์การประมวลผล จะขาด fs ไม่ได้เลย เพราะเป็นเครื่องมือหลักในการเข้าถึงไฟล์และโฟลเดอร์ในระบบ

  • ถ้าอยากให้ CLI ของคุณอ่านไฟล์ config, สร้างไฟล์ใหม่, หรือเก็บ log ต้องใช้ fs
  • fs ใช้งานง่าย รองรับทั้งแบบ synchronous (เหมาะกับ CLI) และ asynchronous (เหมาะกับงานที่ต้องการ performance สูง)
  • มือใหม่ควรเริ่มจาก fs.readFileSync, fs.writeFileSync ก่อน แล้วค่อยเรียนรู้ async

แนะนำ fs module

fs ใช้สำหรับอ่าน/เขียนไฟล์ใน CLI เช่น อ่าน config, บันทึกผลลัพธ์, ตรวจสอบไฟล์ รองรับทั้ง synchronous/asynchronous


การอ่าน/เขียนไฟล์แบบ synchronous

fs.readFileSync(path[, options])

อ่านไฟล์แบบ synchronous (เหมาะกับ CLI ที่ต้องอ่านไฟล์ก่อนทำงานต่อ)

js
const fs = require("fs");
const data = fs.readFileSync("input.txt", "utf8");
console.log(data);

fs.writeFileSync(file, data[, options])

เขียนไฟล์แบบ synchronous

js
fs.writeFileSync("output.txt", "ผลลัพธ์ CLI");

การอ่าน/เขียนไฟล์แบบ async

fs.promises.readFile

js
const fs = require("fs/promises");
const data = await fs.readFile("input.txt", "utf8");

fs.promises.writeFile

js
await fs.writeFile("output.txt", "บันทึกแบบ async");

การตรวจสอบไฟล์/โฟลเดอร์

fs.existsSync(path)

js
if (fs.existsSync("config.json")) {
  console.log("พบไฟล์ config");
}

เคล็ดลับและกรณีใช้งานจริง

  • ใช้ sync สำหรับงาน CLI ที่ไม่ต้องการ concurrency
  • ใช้ async (promise) สำหรับงานที่ต้องการ non-blocking
  • ตรวจสอบไฟล์ก่อนอ่าน/เขียน

ตัวอย่าง: อ่าน config แล้วเขียน log

js
const fs = require("fs");
if (fs.existsSync("config.json")) {
  const config = JSON.parse(fs.readFileSync("config.json", "utf8"));
  fs.appendFileSync("log.txt", `Config loaded: ${JSON.stringify(config)}\n`);
}

อ้างอิง