วิธีลบ node_modules บน Mac โดยไม่ทำให้โปรเจกต์เสียหาย
ทีม AskClean · อัปเดตเมื่อ 2026-08-05
ลบ node_modules ได้เมื่อ package.json, lockfile ที่ถูกต้อง, การตั้งค่า workspace และแหล่งดาวน์โหลด dependency ยังอยู่ครบ ตรวจทีละโปรเจกต์ หยุดโปรเซสที่ใช้งานโฟลเดอร์นี้ แล้วจึงย้ายเฉพาะ node_modules ไปถังขยะ ติดตั้งใหม่ด้วย package manager และเวอร์ชันที่รีโพซิทอรีกำหนด จากนั้นบิลด์และทดสอบให้ผ่านก่อนล้างถังขยะ อย่าสับสน node_modules กับแคช npm ที่ใช้ร่วมกันใน ~/.npm

แยก node_modules ออกจากไฟล์โปรเจกต์และแคช npm
<project>/node_modules คือชุด dependency ที่ติดตั้งแล้วสำหรับโปรเจกต์นั้น เมื่อลบ โปรเจกต์จะรัน บิลด์ หรือทดสอบไม่ได้จนกว่าจะติดตั้งใหม่ ส่วนซอร์สโค้ด, package.json, package-lock.json หรือ lockfile ชนิดอื่น, pnpm-workspace.yaml, .npmrc, ไฟล์ patch, สคริปต์บิลด์ และประวัติ Git คือข้อมูลต้นทางที่ต้องเก็บไว้ แคช ~/.npm ใช้เก็บไฟล์ดาวน์โหลดร่วมกันหลายโปรเจกต์ จึงเป็นคนละขอบเขตกับ node_modules และต้องตัดสินใจล้างแยกกัน
ยืนยันก่อนว่า dependencies สร้างใหม่ได้จริง
lockfile ช่วยให้ติดตั้ง dependency ชุดเดิมได้อย่างคาดเดาได้ แต่ไม่ได้เก็บตัวแพ็กเกจไว้ ตรวจให้พร้อมทั้ง registry ส่วนตัว, ข้อมูลรับรอง, VPN, Git และ file: dependencies, ซอร์สของ workspace, ไฟล์ที่สคริปต์ติดตั้งต้องดาวน์โหลด และชุดเครื่องมือสำหรับคอมไพล์ native module หากแก้ไฟล์ใน node_modules ด้วยมือ ให้ย้ายการแก้ไขไปไว้ใน fork หรือไฟล์ patch ที่เก็บกับโปรเจกต์ก่อนลบ สำหรับ npm v12 ระบบจะไม่อ่าน npm-shrinkwrap.json อีกต่อไป หากไฟล์นี้เป็น lockfile เพียงไฟล์เดียวและยังไม่มี package-lock.json ให้สำรองหรือ commit ก่อน แล้วเปลี่ยนชื่อเป็น package-lock.json ซึ่งใช้รูปแบบเดียวกัน ห้ามเขียนทับ package-lock.json ที่มีอยู่
- จาก root ของโปรเจกต์ ให้รัน pwd และ du -sh ./node_modules แล้วจดพื้นที่ว่างของ macOS
- ตรวจ package.json, lockfile, การตั้งค่า workspace และ git status พร้อมสำรองงานที่ยังไม่ได้ commit; หาก npm-shrinkwrap.json เป็น lockfile เพียงไฟล์เดียว ให้เปลี่ยนชื่อเป็น package-lock.json ก่อนใช้ npm v12 โดยห้ามเขียนทับ package-lock.json ที่มีอยู่
- ยืนยัน package manager กับเวอร์ชัน รวมถึงการเข้าถึง registry ส่วนตัว, Git, file: dependencies, แหล่งดาวน์โหลดภายนอก และชุดเครื่องมือคอมไพล์
- หยุด dev server, test watcher และส่วนขยายของเอดิเตอร์ที่กำลังติดตั้งแพ็กเกจ จากนั้นย้ายเฉพาะ node_modules ที่ตรวจแล้วไปถังขยะและติดตั้งใหม่จาก root ที่ถูกต้อง
- รันขั้นตอนบิลด์ ทดสอบ lint และเปิดแอป เมื่อทุกอย่างผ่านจึงล้างถังขยะและวัดพื้นที่จริงอีกครั้ง
อย่าเก็บ dependency หรือการแก้ไขด้วยมือไว้ใน node_modules เพียงแห่งเดียว แม้มี lockfile ก็ไม่ได้รับประกันว่าแพ็กเกจส่วนตัว ไฟล์ภายนอก หรือ dependency ในเครื่องจะยังหาได้เมื่อต้องติดตั้งใหม่
ลบเฉพาะโฟลเดอร์ที่ตรวจแล้วทีละโปรเจกต์
ที่ root ของโปรเจกต์ ให้รัน pwd และ du -sh ./node_modules ก่อน หากต้องการสำรวจในขอบเขตที่รู้จัก ใช้ find "$HOME/Projects" -type d -name node_modules -prune -exec du -sh {} + โดยเปลี่ยน $HOME/Projects ให้เป็นโฟลเดอร์จริงที่ต้องการตรวจ วิธีที่ย้อนกลับได้คือย้ายเฉพาะ node_modules เป้าหมายไปถังขยะ ส่วน rm -rf ./node_modules จะข้ามถังขยะและย้อนกลับไม่ได้ ห้ามนำผล find ที่ยังไม่ได้ตรวจ wildcard ตัวแปรว่าง หรือพาธจากสคริปต์ที่ไม่น่าเชื่อถือไปต่อเป็นคำสั่งลบวงกว้าง สำหรับ monorepo ให้ถือทั้งรีโพซิทอรีเป็นระบบเดียวและติดตั้งใหม่จาก root ที่ lockfile กำกับ
ติดตั้งด้วย package manager เดิมและตรวจทั้งโปรเจกต์
หากโปรเจกต์ npm ยึด package-lock.json เป็นหลัก ให้รัน npm ci จาก root ที่ lockfile กำกับ สำหรับ pnpm ใช้ pnpm install --frozen-lockfile, Yarn รุ่นใหม่ใช้ yarn install --immutable, Yarn Classic มักใช้ yarn install --frozen-lockfile และ Bun ใช้ bun install --frozen-lockfile การติดตั้งสำเร็จเพียงอย่างเดียวยังไม่ยืนยันว่าโปรเจกต์ใช้ได้ ให้รันขั้นตอนบิลด์ ทดสอบ lint และเปิดแอปตามที่รีโพซิทอรีระบุ หากล้มเหลว ให้เก็บ log กู้โฟลเดอร์จากถังขยะถ้ายังทำได้ แล้วตรวจเวอร์ชัน ข้อมูลรับรอง เครือข่าย ชุดเครื่องมือคอมไพล์ และความสอดคล้องของ lockfile ก่อนลบโปรเจกต์อื่น
ขอบเขตการล้างและต้นทุนการกู้คืน
ค้นหาและวัดขนาด node_modules บน Mac เก็บซอร์สโค้ดกับ lockfile ไว้ แล้วติดตั้ง dependency ใหม่อย่างปลอดภัยด้วย npm, pnpm, Yarn หรือ Bun
| รายการหรือการดำเนินการ | ตรวจสอบได้ที่ | ผลที่ตามมา |
|---|---|---|
| แยก node_modules ออกจากไฟล์โปรเจกต์และแคช npm | <project>/node_modules | <project>/node_modules คือชุด dependency ที่ติดตั้งแล้วสำหรับโปรเจกต์นั้น เมื่อลบ โปรเจกต์จะรัน บิลด์ หรือทดสอบไม่ได้จนกว่าจะติดตั้งใหม่ ส่วนซอร์สโค้ด, package.json, package-lock.json หรือ lockfile ชนิดอื่น, pnpm-workspace.yaml, .npmrc, ไฟล์ patch, สคริปต์บิลด์ และประวัติ Git คือข้อมูลต้นทางที่ต้องเก็บไว้ แคช ~/.npm ใช้เก็บไฟล์ดาวน์โหลดร่วมกันหลายโปรเจกต์ จึงเป็นคนละขอบเขตกับ node_modules และต้องตัดสินใจล้างแยกกัน |
| ยืนยันก่อนว่า dependencies สร้างใหม่ได้จริง | package.json + lockfile + การตั้งค่า workspace | lockfile ช่วยให้ติดตั้ง dependency ชุดเดิมได้อย่างคาดเดาได้ แต่ไม่ได้เก็บตัวแพ็กเกจไว้ ตรวจให้พร้อมทั้ง registry ส่วนตัว, ข้อมูลรับรอง, VPN, Git และ file: dependencies, ซอร์สของ workspace, ไฟล์ที่สคริปต์ติดตั้งต้องดาวน์โหลด และชุดเครื่องมือสำหรับคอมไพล์ native module หากแก้ไฟล์ใน node_modules ด้วยมือ ให้ย้ายการแก้ไขไปไว้ใน fork หรือไฟล์ patch ที่เก็บกับโปรเจกต์ก่อนลบ สำหรับ npm v12 ระบบจะไม่อ่าน npm-shrinkwrap.json อีกต่อไป หากไฟล์นี้เป็น lockfile เพียงไฟล์เดียวและยังไม่มี package-lock.json ให้สำรองหรือ commit ก่อน แล้วเปลี่ยนชื่อเป็น package-lock.json ซึ่งใช้รูปแบบเดียวกัน ห้ามเขียนทับ package-lock.json ที่มีอยู่ |
| ลบเฉพาะโฟลเดอร์ที่ตรวจแล้วทีละโปรเจกต์ | ถังขยะ / ติดตั้งใหม่ด้วย package manager | ที่ root ของโปรเจกต์ ให้รัน pwd และ du -sh ./node_modules ก่อน หากต้องการสำรวจในขอบเขตที่รู้จัก ใช้ find "$HOME/Projects" -type d -name node_modules -prune -exec du -sh {} + โดยเปลี่ยน $HOME/Projects ให้เป็นโฟลเดอร์จริงที่ต้องการตรวจ วิธีที่ย้อนกลับได้คือย้ายเฉพาะ node_modules เป้าหมายไปถังขยะ ส่วน rm -rf ./node_modules จะข้ามถังขยะและย้อนกลับไม่ได้ ห้ามนำผล find ที่ยังไม่ได้ตรวจ wildcard ตัวแปรว่าง หรือพาธจากสคริปต์ที่ไม่น่าเชื่อถือไปต่อเป็นคำสั่งลบวงกว้าง สำหรับ monorepo ให้ถือทั้งรีโพซิทอรีเป็นระบบเดียวและติดตั้งใหม่จาก root ที่ lockfile กำกับ |
| ติดตั้งด้วย package manager เดิมและตรวจทั้งโปรเจกต์ | บิลด์ + ทดสอบ + เปิดแอป | หากโปรเจกต์ npm ยึด package-lock.json เป็นหลัก ให้รัน npm ci จาก root ที่ lockfile กำกับ สำหรับ pnpm ใช้ pnpm install --frozen-lockfile, Yarn รุ่นใหม่ใช้ yarn install --immutable, Yarn Classic มักใช้ yarn install --frozen-lockfile และ Bun ใช้ bun install --frozen-lockfile การติดตั้งสำเร็จเพียงอย่างเดียวยังไม่ยืนยันว่าโปรเจกต์ใช้ได้ ให้รันขั้นตอนบิลด์ ทดสอบ lint และเปิดแอปตามที่รีโพซิทอรีระบุ หากล้มเหลว ให้เก็บ log กู้โฟลเดอร์จากถังขยะถ้ายังทำได้ แล้วตรวจเวอร์ชัน ข้อมูลรับรอง เครือข่าย ชุดเครื่องมือคอมไพล์ และความสอดคล้องของ lockfile ก่อนลบโปรเจกต์อื่น |
คำถามที่พบบ่อย
ลบ node_modules แล้วซอร์สโค้ดจะหายไหม?
ไม่หายถ้าลบเฉพาะ node_modules แต่การลบโฟลเดอร์โปรเจกต์แม่เป็นอีกเรื่องหนึ่งและทำให้ข้อมูลสูญหายได้ ต้องเก็บ package.json, lockfile, ซอร์สโค้ด, การตั้งค่า, ไฟล์ patch และประวัติ Git ไว้
node_modules เหมือนกับแคช npm ไหม?
ไม่เหมือนกัน node_modules คือ dependency ที่ติดตั้งไว้สำหรับโปรเจกต์หนึ่ง ส่วน ~/.npm โดยปกติคือแคชไฟล์ดาวน์โหลดที่ใช้ร่วมกันหลายโปรเจกต์ การลบอย่างหนึ่งไม่ได้ลบอีกอย่างหนึ่ง
ทำไม npm ci จึงล้มเหลวหลังลบ node_modules?
สาเหตุที่พบบ่อยคือ package.json ไม่ตรงกับ package-lock.json, เวอร์ชัน npm หรือ Node.js เปลี่ยน, ค่า .npmrc หาย, ข้อมูลรับรองหมดอายุ, แหล่ง dependency ใช้ไม่ได้ หรือขาดชุดเครื่องมือคอมไพล์ หากมีเพียง npm-shrinkwrap.json ต้องเปลี่ยนชื่อเป็น package-lock.json ก่อน เพราะ npm v12 ไม่อ่านชื่อเดิม และห้ามเขียนทับ package-lock.json ที่มีอยู่
แหล่งอ้างอิง