Dark mode
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`);
}