Як очистити папку node_modules від пакетів, які не містяться в package.json?


338

Припустимо , я встановлюю пакети проекту з того, npm installщо зовнішній вигляд в package.jsonпротягом модулі повинні бути встановлені. Через деякий час я бачу, що мені не потрібен якийсь конкретний модуль, і знімаю його залежність від package.json. Потім я видаляю деякі інші модулі, package.jsonоскільки вони більше не потрібні, а інші замінюються альтернативними.

Тепер я хочу очистити node_modulesпапку, щоб package.jsonзалишилися там лише ті модулі, які перераховані, а решта повинна ходити, щось на кшталт npm clean. Я знаю, що можу їх видалити вручну, але хотів би, щоб вони були готові до використання функцій цукру для цього.

Відповіді:


407

Я думаю, ти шукаєш npm prune

npm prune [<name> [<name ...]]

Ця команда видаляє "сторонні" пакети. Якщо вказано ім’я пакета, видаляються лише пакети, що відповідають одному із наданих імен.

Сторонні пакети - це пакунки, які не вказані у списку батьківських пакетів залежностей.

Дивіться документи: https://docs.npmjs.com/cli/prune


1
Наскільки я знаю, у новій версії NPM всі залежності знаходяться в кореневій node_modulesпапці, а не як раніше, де кожна залежність мала власні залежності, встановлені у власних node_modulesпапках ... безлічі копій одних і тих же залежностей ... так чи npm pruneвраховує це? тому що ці глибокі залежності не написані на головному package.jsonвашому проекті .. чорнослив повинен виглядати рекурсивно.
vsync

2
@vsync Зниження копій досягається командою npm dedupe docs.npmjs.com/cli/dedupe . Він намагається спростити дерево вузла, переміщуючи залежності вгору по дереву.
knaos

Я бачив, як чорнослив NPM не може видалити речі, які зазвичай вивертаються, коли в моєму корпоративному сховищі є щось зафіксовано. Тоді я маю rm-rf. Було б непогано, якби була команда "удар
усякий, то регеть

210

Ви можете видалити свої node_modules / папку, а потім знову встановити залежності від package.json.

rm -rf node_modules/
npm install

Це видалить усі встановлені пакети у поточній папці та встановило б лише залежності від package.json. Якщо раніше були встановлені залежності npm, спробує використовувати кешовану версію, уникаючи завантаження залежності вдруге.


4
Так, я знаю, що я можу скористатися цим методом, але мені цікаво, чому ще немає більш елегантного рішення для цього.
Сергій Башаров

Чи дійсно немає команди npm для видалення node_modules, крім видалення папки?
Андерс

4
На платформі Windows він не спрацьовує під час видалення node_modules через Explorer або командний рядок (оскільки шлях до деяких модулів довший 256). Повинна бути команда npm, щоб зробити це більш чистим способом.
Раві Кумар

9
Або за допомогою rmdir node_modules /s /qWindows. superuser.com/a/179661/440976
Weddury Yuri

5
Я вважаю, що у цій відповіді відсутній дуже важливий момент: якщо вас обмежує трафік (тобто у вас дорогий за мегабайт платний зв’язок, як мобільний), і у вас багато модулів, це може коштувати вам , тоді як pruneваріант вимагає взагалі мати підключення до Інтернету.
Іван Колмичек

102

Завдяки гніздовій папці Windows не може видалити папку, оскільки її ім'я задовге. Щоб вирішити це, встановіть RimRaf:

npm install rimraf -g

rimraf node_modules

8
Або простоrm -rf node_modules
kappaallday

16
rm -rf node_modulesне працюватиме на вікнах. Дивіться це рішення: superuser.com/a/179661/440976
Weddury Yuri

1
win7 x64 rimraf чудово працював за допомогою PowerShell .. спасибі
загартований

Найкраще рішення для Windows 10 64-розрядні за допомогою CMD
Matt Cromwell

rm -rf node_modules не працював для мене в Windows 10. Але rimraf працював на мене
ssmsnet

24

просто просто запустити

rm -r node_modules

насправді ви можете видалити будь-яку папку за допомогою цього.

як rm -r AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete .

просто відкрийте переміщення gitbash до кореня папки та запустіть цю команду

Сподіваюсь, це допоможе.


2
Не працює, я отримую помилку "відмовлено у дозволі" (використовуючи gitbash.
drake035

3
відкрити gitbash в режимі адміністратора. Я думаю, це допоможе. або змінити налаштування рівня дозволу на папки
Ajay Kotnala

3
Це видалить усі пакети. ОП чітко говорить: "Я хочу очистити папку node_modules, щоб там залишилися лише модулі, перелічені в package.json".
Боаз

у цьому випадку мій друг, ви можете просто зробити "npm uninstall package_name" або --save як суфікс, який також видалить його запис із файлу package.json. npm uninstall package_name (delete package) npm uninstall package_name --save (видаліть пакет та видаліть запис із залежностей у пакеті json) npm uninstall package_name --save-dev (видаліть пакет та видаліть запис із devdependitions в пакеті json)
Ajay Kotnala

22

Спочатку встановіть римраф у всьому світі

npm install rimraf -g

перейдіть до контуру за допомогою cmd, де папка node_modules, і застосуйте команду нижче

rimraf node_modules

Хороша відповідь, але встановити пакет для видалення інших - це не дуже гарна ідея. npm pruneє ідеальним рішенням.
Біньяк Гурі Шанкар

Так, але якщо ви хочете видалити папку node_module зі свого проекту, це найкращий і простий спосіб.
Анкіт Пармар


9

від версії 6.5.0 npm підтримує команду clean-installжорсткого оновлення всіх пакетів


1
Це саме те, що мені було потрібно. Коли я оновлюю вузол, перше, що трапляється, - це "схоже на те, що ти змінив своє оточення з моменту запуску" npm install "". Оскільки я вже в консолі, найпростіше просто зробити чисте встановлення, а не возитися спочатку видалення папок тощо.
Jarrod McGuire

3

Я додав кілька рядків всередині package.json:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

Якщо ви хочете cleanлише ви можете скористатися цим rimraf node_modulesабо rm -rf node_modules.

Це чудово працює



1

Найкраща стаття, яку я знайшов про це, є ця: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

Все з консолі та легко виконати з будь-якої точки папки.

Але як підсумок статті, ця команда знайти розмір для кожної node_moduleпапки, знайденої в різних проектах.

find . -name "node_modules" -type d -prune -print | xargs du -chs

І фактично їх видалити:

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

У статті також містяться інструкції щодо оболонки Windows.


0

Видаліть / відредагуйте пакети, які не потрібні в пакет-lock.json (назви пакетів будуть записуватися під залежності та devDependitions), а потім

npm install


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.