วิธีล้างแคช npm บน Mac อย่างปลอดภัย
ทีม AskClean · อัปเดตเมื่อ 2026-08-05
เริ่มด้วย npm config get cache เพื่อหาพาธแคชที่ใช้งานจริง วัดพาธนั้นแล้วรัน npm cache verify ก่อนลบ ใช้ npm cache clean --force เฉพาะเมื่อจำเป็นต้องคืนพื้นที่และยอมรับว่าการติดตั้งครั้งต่อไปอาจต้องดาวน์โหลดใหม่ คำสั่งนี้ไม่ลบ node_modules, package.json หรือ lockfile และไม่ควรนำงานเหล่านั้นมารวมไว้ในการเปลี่ยนแปลงครั้งเดียวกัน

แคช npm ไม่ใช่ dependencies ของโปรเจกต์
npm ใช้แคชแบบ content-addressed สำหรับไฟล์ดาวน์โหลดที่หลายโปรเจกต์นำกลับมาใช้ได้ ตำแหน่งเริ่มต้นบน macOS คือ ~/.npm แต่การตั้งค่าอาจชี้ไปที่อื่น ส่วน node_modules คือชุด dependency ที่ติดตั้งในโปรเจกต์ และ package.json กับ package-lock.json เป็นไฟล์โปรเจกต์ ไม่ใช่แคช การล้างแคชไม่ลบ node_modules และการลบ node_modules ก็ไม่ล้างแคช npm สำหรับ npm v12 นั้น npm-shrinkwrap.json ยังเป็นไฟล์โปรเจกต์ที่ห้ามลบ แต่ระบบไม่อ่านชื่อไฟล์นี้แล้ว หากเป็น lockfile เพียงไฟล์เดียวและยังไม่มี package-lock.json ให้สำรองหรือ commit แล้วเปลี่ยนชื่อเป็น package-lock.json โดยห้ามเขียนทับไฟล์ที่มีอยู่
หา วัด และตรวจสอบแคชที่ใช้งานจริง
อย่าถือว่า ~/.npm คือแคชปัจจุบันเพียงเพราะมีโฟลเดอร์อยู่ ให้รัน npm --version และ npm config get cache แล้วใช้ du -sh วัดพาธที่แสดง จากนั้นหยุดโปรเซส npm ที่กำลังใช้แคชและรัน npm cache verify คำสั่งนี้ตรวจ index และข้อมูลในแคช ยืนยันความถูกต้องของเนื้อหา และเก็บกวาดข้อมูลที่ไม่จำเป็นโดยยังคงไฟล์ดาวน์โหลดที่ใช้ได้ไว้ จึงควรเป็นขั้นแรกทั้งในการบำรุงรักษาและวินิจฉัยปัญหา
- รัน npm --version และ npm config get cache แล้วตรวจว่าผลลัพธ์เป็นโฟลเดอร์แคช ไม่ใช่โฟลเดอร์โปรเจกต์
- ใช้ du -sh วัดพาธที่ได้และจดพื้นที่ว่างของ macOS ห้ามส่งพาธที่คาดเดาเองให้ rm -rf
- หยุด npm install, npm ci, npm exec และโปรเซส publish ที่กำลังทำงาน แล้วรัน npm cache verify พร้อมเก็บสรุปและข้อผิดพลาดไว้
- เมื่อวัดแล้วว่าพื้นที่คุ้มกับต้นทุนและยืนยันว่าแหล่ง dependency กับเครือข่ายพร้อม จึงรัน npm cache clean --force
- รัน npm cache verify อีกครั้ง วัดพาธเดิม แล้วติดตั้ง บิลด์ และทดสอบโปรเจกต์ตัวแทนโดยไม่เปลี่ยน package.json หรือ lockfile
ห้ามนำพาธที่ยังไม่ได้ตรวจไปใช้กับ rm -rf และอย่าล้างแคชพร้อมลบหรือสร้าง lockfile ใหม่ เพราะสถานะแคชกับผลการ resolve จะเปลี่ยนพร้อมกันจนวินิจฉัยต้นเหตุไม่ได้ หากต้องทำงานออฟไลน์ ให้เก็บแคชที่ยังใช้ได้ไว้หรือเตรียม registry ภายในก่อน
บังคับล้างเฉพาะเมื่อมีเหตุผลชัดเจน
npm cache clean --force ลบไฟล์ดาวน์โหลดที่นำกลับมาใช้ได้จากแคชตามการตั้งค่าปัจจุบัน การติดตั้งครั้งถัดไปของหลายโปรเจกต์จึงอาจช้าลงและต้องพึ่ง registry, โฮสต์ส่วนตัว, proxy และเครือข่าย อย่าตั้งค่า force ไว้ถาวร เพราะมีผลลดการป้องกันของคำสั่ง npm อื่นด้วย และอย่าคาดว่าการล้างแคชจะแก้ ERESOLVE, การยืนยันตัวตน, ข้อกำหนดเวอร์ชัน Node.js, การคอมไพล์ native module หรือ lifecycle script ได้ หากแพ็กเกจที่เลิกเผยแพร่เหลืออยู่เฉพาะในแคช การล้างจะทำให้ใช้สำเนานั้นต่อไม่ได้ทันที
ตรวจผลโดยไม่เปลี่ยนชุด dependency
เก็บซอร์สโค้ด, package.json, package-lock.json และการตั้งค่า registry ส่วนตัวไว้เหมือนเดิม เพราะ lockfile ระบุว่าจะติดตั้งอะไร แต่ไม่ได้เก็บข้อมูลแพ็กเกจไว้ หลังล้างให้รัน npm config get cache และ npm cache verify อีกครั้ง วัดพาธเดิมกับพื้นที่ว่างของ macOS แล้วทดสอบติดตั้ง บิลด์ และทดสอบโปรเจกต์ตัวแทนด้วย lockfile เดิม หากข้อผิดพลาดเดิมกลับมา ให้หยุดล้างซ้ำและตรวจเวอร์ชัน npm/Node.js, การตั้งค่า registry, ข้อมูลรับรอง, เครือข่าย และการ resolve dependency แทน AskClean ตรวจพบเฉพาะแคชเริ่มต้น ~/.npm; พาธที่กำหนดเองยังต้องตรวจผ่าน npm
ขอบเขตการล้างและต้นทุนการกู้คืน
ค้นหาและวัดแคชไฟล์ดาวน์โหลดที่ npm ใช้จริงบน macOS ตรวจสอบก่อนล้าง โดยไม่แตะ node_modules, package.json หรือ lockfile
| รายการหรือการดำเนินการ | ตรวจสอบได้ที่ | ผลที่ตามมา |
|---|---|---|
| แคช npm ไม่ใช่ dependencies ของโปรเจกต์ | npm config get cache | npm ใช้แคชแบบ content-addressed สำหรับไฟล์ดาวน์โหลดที่หลายโปรเจกต์นำกลับมาใช้ได้ ตำแหน่งเริ่มต้นบน macOS คือ ~/.npm แต่การตั้งค่าอาจชี้ไปที่อื่น ส่วน node_modules คือชุด dependency ที่ติดตั้งในโปรเจกต์ และ package.json กับ package-lock.json เป็นไฟล์โปรเจกต์ ไม่ใช่แคช การล้างแคชไม่ลบ node_modules และการลบ node_modules ก็ไม่ล้างแคช npm สำหรับ npm v12 นั้น npm-shrinkwrap.json ยังเป็นไฟล์โปรเจกต์ที่ห้ามลบ แต่ระบบไม่อ่านชื่อไฟล์นี้แล้ว หากเป็น lockfile เพียงไฟล์เดียวและยังไม่มี package-lock.json ให้สำรองหรือ commit แล้วเปลี่ยนชื่อเป็น package-lock.json โดยห้ามเขียนทับไฟล์ที่มีอยู่ |
| หา วัด และตรวจสอบแคชที่ใช้งานจริง | npm cache verify | อย่าถือว่า ~/.npm คือแคชปัจจุบันเพียงเพราะมีโฟลเดอร์อยู่ ให้รัน npm --version และ npm config get cache แล้วใช้ du -sh วัดพาธที่แสดง จากนั้นหยุดโปรเซส npm ที่กำลังใช้แคชและรัน npm cache verify คำสั่งนี้ตรวจ index และข้อมูลในแคช ยืนยันความถูกต้องของเนื้อหา และเก็บกวาดข้อมูลที่ไม่จำเป็นโดยยังคงไฟล์ดาวน์โหลดที่ใช้ได้ไว้ จึงควรเป็นขั้นแรกทั้งในการบำรุงรักษาและวินิจฉัยปัญหา |
| บังคับล้างเฉพาะเมื่อมีเหตุผลชัดเจน | npm cache clean --force | npm cache clean --force ลบไฟล์ดาวน์โหลดที่นำกลับมาใช้ได้จากแคชตามการตั้งค่าปัจจุบัน การติดตั้งครั้งถัดไปของหลายโปรเจกต์จึงอาจช้าลงและต้องพึ่ง registry, โฮสต์ส่วนตัว, proxy และเครือข่าย อย่าตั้งค่า force ไว้ถาวร เพราะมีผลลดการป้องกันของคำสั่ง npm อื่นด้วย และอย่าคาดว่าการล้างแคชจะแก้ ERESOLVE, การยืนยันตัวตน, ข้อกำหนดเวอร์ชัน Node.js, การคอมไพล์ native module หรือ lifecycle script ได้ หากแพ็กเกจที่เลิกเผยแพร่เหลืออยู่เฉพาะในแคช การล้างจะทำให้ใช้สำเนานั้นต่อไม่ได้ทันที |
| ตรวจผลโดยไม่เปลี่ยนชุด dependency | ติดตั้ง + ตรวจโหมดออฟไลน์/registry ส่วนตัว | เก็บซอร์สโค้ด, package.json, package-lock.json และการตั้งค่า registry ส่วนตัวไว้เหมือนเดิม เพราะ lockfile ระบุว่าจะติดตั้งอะไร แต่ไม่ได้เก็บข้อมูลแพ็กเกจไว้ หลังล้างให้รัน npm config get cache และ npm cache verify อีกครั้ง วัดพาธเดิมกับพื้นที่ว่างของ macOS แล้วทดสอบติดตั้ง บิลด์ และทดสอบโปรเจกต์ตัวแทนด้วย lockfile เดิม หากข้อผิดพลาดเดิมกลับมา ให้หยุดล้างซ้ำและตรวจเวอร์ชัน npm/Node.js, การตั้งค่า registry, ข้อมูลรับรอง, เครือข่าย และการ resolve dependency แทน AskClean ตรวจพบเฉพาะแคชเริ่มต้น ~/.npm; พาธที่กำหนดเองยังต้องตรวจผ่าน npm |
คำถามที่พบบ่อย
ควรใช้ npm cache verify หรือ npm cache clean?
ใช้ npm cache verify ก่อน คำสั่งนี้ตรวจความถูกต้องและเก็บกวาดข้อมูลที่ไม่จำเป็นโดยยังคงเนื้อหาที่ใช้ได้ไว้ ส่วน npm cache clean --force ควรใช้เฉพาะเมื่อจำเป็นต้องคืนพื้นที่ที่วัดแล้ว หรือพบปัญหาเฉพาะแคชที่ verify จัดการไม่ได้
ล้างแคช npm แล้ว node_modules จะหายไหม?
ไม่หาย แคชคือที่เก็บไฟล์ดาวน์โหลดที่ใช้ร่วมกันตามการตั้งค่า ส่วน node_modules คือ dependency ที่ติดตั้งในแต่ละโปรเจกต์และต้องจัดการแยกกัน
ทำไมติดตั้งยังล้มเหลวหลังล้างแคช?
ต้นเหตุอาจเป็นข้อมูลรับรอง เครือข่ายหรือ proxy, เวอร์ชันแพ็กเกจที่ไม่มีแล้ว, ข้อกำหนดเวอร์ชัน Node.js, การ resolve dependency, การคอมไพล์ native module หรือ lifecycle script ให้เก็บข้อผิดพลาดแรกที่มีความหมายแล้ววินิจฉัยสาเหตุแทนการลบซ้ำ
แหล่งอ้างอิง