AskCleanAskClean

איך למחוק node_modules ב-Mac בלי לאבד את הפרויקט

צוות AskClean · עודכן 2026-08-05

אפשר למחוק את תיקיית node_modules של פרויקט אם package.json, קובץ הנעילה הנכון וכל מקורות התלויות עדיין זמינים. מדדו תחילה את תיקיית התלויות, עצרו תהליכים פעילים והעבירו לפח האשפה רק את התיקייה שאומתה. לאחר מכן התקינו מחדש עם אותו מנהל חבילות ובדקו בנייה והפעלה לפני ריקון הפח.

זרוע רובוטית מעבירה קוביית תלות מרשת של מודולים אל פח מחזור, לצד שרטוט, מנעול וקובייה מוגנת
הסירו רק את תיקיית התלויות שניתנת לבנייה מחדש, והגנו על מניפסט הפרויקט, קובץ הנעילה, ההגדרות וקוד המקור.

הפרידו בין node_modules, הפרויקט והמטמון של npm

node_modules הוא עץ התלויות המותקן של הפרויקט: אפשר לבנות אותו מחדש בתנאים המתאימים, אך הפרויקט לא ירוץ ולא ייבנה עד שההתקנה תושלם. package.json, קובצי נעילה, קוד מקור, הגדרות, טלאים, קובצי workspace והיסטוריית Git הם מתכון הבנייה מחדש ואסור למחוק אותם. גם מטמון ההורדות המשותף של npm, שנמצא כברירת מחדל ב-~/.npm, הוא קטגוריה נפרדת.

ודאו שאפשר באמת לשחזר את התלויות

קובץ נעילה מאפשר פתרון תלויות צפוי, אך אינו מכיל את החבילות עצמן. בדקו את מנהל החבילות וגרסתו, וכן גישה למאגרים פרטיים, VPN, תלויות Git ו-file:, חבילות workspace מקומיות, הורדות חיצוניות וכלי בנייה למודולים בינאריים. npm v12 אינו קורא עוד npm-shrinkwrap.json; אם זהו קובץ הנעילה היחיד בפרויקט ישן, שנו את שם הקובץ הזה, שהמבנה שלו זהה, ל-package-lock.json לפני השימוש ב-npm v12. לעולם אל תדרסו package-lock.json קיים; השוו בין הקבצים ויישבו את ההבדלים בנפרד. שינוי שקיים רק בתוך node_modules יאבד בעת המחיקה.

  1. משורש הפרויקט הריצו pwd ו-du -sh ./node_modules, ורשמו גם את המקום הפנוי ב-macOS.
  2. ודאו שקיימים package.json וקובץ הנעילה הנכון, ובדקו הגדרות workspace ושינויים מקומיים; עם npm v12 שנו את שם npm-shrinkwrap.json ל-package-lock.json רק אם package-lock.json עדיין אינו קיים.
  3. ודאו גישה למאגרים פרטיים, לתלויות Git ו-file:, לחבילות מקומיות, להורדות חיצוניות ולכלי בנייה של מודולים בינאריים, ואז עצרו תהליכים שמשתמשים ב-node_modules.
  4. העבירו לפח האשפה רק את תיקיית node_modules שאומתה והתקינו מחדש מהשורש הנכון באמצעות מנהל החבילות וקובץ הנעילה שהמאגר מגדיר.
  5. הריצו בנייה, בדיקות, lint ואת האפליקציה, מדדו שוב את המקום ורוקנו את פח האשפה רק לאחר שהאימות הצליח.

אל תשאירו ב-node_modules את העותק היחיד של חבילה או תיקון ידני. אם אי אפשר להשיג את הגרסה המדויקת של תלות והמקור שלה לא נשמר במקום אחר, המחיקה עלולה להשאיר פרויקט ישן ללא דרך שחזור.

הסירו תיקיית תלויות מאומתת אחת

משורש הפרויקט שאומת, העבירו ב-Finder רק את node_modules לפח האשפה, לא את מאגר הקוד שמכיל אותה. הפקודה rm -rf ./node_modules עוקפת את פח האשפה ואינה הפיכה, לכן ודאו תחילה את השורש עם pwd. לאחר מכן השתמשו ב-npm ci כאשר package-lock.json הוא המקור הקובע, או באפשרות שמונעת שינוי של קובץ הנעילה ושהמאגר מגדיר עבור pnpm, Yarn או Bun. ב-monorepo התחילו מקובץ הנעילה שבשורש והתייחסו לכל ה-workspaces כמערכת אחת.

התקינו מחדש ואמתו את הפרויקט כולו

התקנה שהצליחה אינה מוכיחה לבדה שהפרויקט שוחזר. הריצו את פקודות הבנייה, הבדיקות וה-lint המתועדות, ואז הפעילו את האפליקציה; מודולים בינאריים או סקריפטים של מחזור החיים עלולים להיכשל אחרי שינוי בגרסאות כלי העבודה. עלות השחזור כוללת הורדה, חילוץ, יצירת קישורים ולעיתים הידור. במקרה של כשל, שחזרו מפח האשפה אם אפשר ואבחנו גישה, רשת, גרסאות וקובץ נעילה לפני ניקוי פרויקט נוסף.

גבולות המחיקה ועלות השחזור

אתרו תיקיות node_modules גדולות, הגנו על קוד המקור ועל קובץ הנעילה והתקינו מחדש תלויות בבטחה עם npm, pnpm, Yarn או Bun.

פריט או פעולהמיקום או כלי בדיקההשלכה
הפרידו בין node_modules, הפרויקט והמטמון של npmתיקיית node_modules בפרויקטnode_modules הוא עץ התלויות המותקן של הפרויקט: אפשר לבנות אותו מחדש בתנאים המתאימים, אך הפרויקט לא ירוץ ולא ייבנה עד שההתקנה תושלם. package.json, קובצי נעילה, קוד מקור, הגדרות, טלאים, קובצי workspace והיסטוריית Git הם מתכון הבנייה מחדש ואסור למחוק אותם. גם מטמון ההורדות המשותף של npm, שנמצא כברירת מחדל ב-~/.npm, הוא קטגוריה נפרדת.
ודאו שאפשר באמת לשחזר את התלויותpackage.json + קובץ נעילה + הגדרות workspaceקובץ נעילה מאפשר פתרון תלויות צפוי, אך אינו מכיל את החבילות עצמן. בדקו את מנהל החבילות וגרסתו, וכן גישה למאגרים פרטיים, VPN, תלויות Git ו-file:, חבילות workspace מקומיות, הורדות חיצוניות וכלי בנייה למודולים בינאריים. npm v12 אינו קורא עוד npm-shrinkwrap.json; אם זהו קובץ הנעילה היחיד בפרויקט ישן, שנו את שם הקובץ הזה, שהמבנה שלו זהה, ל-package-lock.json לפני השימוש ב-npm v12. לעולם אל תדרסו package-lock.json קיים; השוו בין הקבצים ויישבו את ההבדלים בנפרד. שינוי שקיים רק בתוך node_modules יאבד בעת המחיקה.
הסירו תיקיית תלויות מאומתת אחתפח האשפה / התקנה מחדש באמצעות מנהל החבילותמשורש הפרויקט שאומת, העבירו ב-Finder רק את node_modules לפח האשפה, לא את מאגר הקוד שמכיל אותה. הפקודה rm -rf ./node_modules עוקפת את פח האשפה ואינה הפיכה, לכן ודאו תחילה את השורש עם pwd. לאחר מכן השתמשו ב-npm ci כאשר package-lock.json הוא המקור הקובע, או באפשרות שמונעת שינוי של קובץ הנעילה ושהמאגר מגדיר עבור pnpm, Yarn או Bun. ב-monorepo התחילו מקובץ הנעילה שבשורש והתייחסו לכל ה-workspaces כמערכת אחת.
התקינו מחדש ואמתו את הפרויקט כולובנייה + בדיקות + הפעלת האפליקציההתקנה שהצליחה אינה מוכיחה לבדה שהפרויקט שוחזר. הריצו את פקודות הבנייה, הבדיקות וה-lint המתועדות, ואז הפעילו את האפליקציה; מודולים בינאריים או סקריפטים של מחזור החיים עלולים להיכשל אחרי שינוי בגרסאות כלי העבודה. עלות השחזור כוללת הורדה, חילוץ, יצירת קישורים ולעיתים הידור. במקרה של כשל, שחזרו מפח האשפה אם אפשר ואבחנו גישה, רשת, גרסאות וקובץ נעילה לפני ניקוי פרויקט נוסף.

שאלות נפוצות

האם בטוח למחוק node_modules ב-Mac?

בדרך כלל כן, אם package.json, קובץ הנעילה הנכון, קובצי workspace, קוד המקור וכל מקורות התלויות נשמרו. עם זאת, הפרויקט לא ירוץ ולא ייבנה עד שההתקנה והאימות יושלמו.

האם למחוק את package-lock.json יחד עם node_modules?

לא. npm זקוק ל-package-lock.json כדי לשחזר את פתרון התלויות. npm v12 אינו קורא עוד npm-shrinkwrap.json; אם זהו קובץ הנעילה היחיד בפרויקט ישן, שנו את שמו ל-package-lock.json במקום למחוק אותו, ולעולם אל תדרסו package-lock.json קיים.

האם node_modules והמטמון של npm הם אותו דבר?

לא. node_modules מכיל תלויות מותקנות של פרויקט, ואילו המטמון המשותף של npm שומר הורדות לשימוש חוזר ונמצא כברירת מחדל ב-~/.npm. מחיקת האחד אינה מוחקת את האחר, ולכל פעולה טווח ועלות שחזור שונים.

מקורות

המשיכו לנקות את אחסון הפיתוח