Як ви можете видалити всі залежності, перелічені в package.json (NPM)?


107

Якщо у мене в корені програми визначений файл package.json і npm install -gвін запустить, він встановить усі залежності, визначені в package.json, globablly.

Однак, схоже, це не працює в зворотному напрямку.

Якщо я виконую npm uninstall -gкорінь програми, вона видає помилку, очікуючи передати її ім'я пакета.

Чи не слід це також видаляти ті самі пакунки, які я встановив?

Я щось роблю не так?


1
FYI моє міркування про те, що ніколи не використовую npm -g. peterlyons.com/problog/2012/09/…
Пітер Ліонс

1
Пам'ятайте, що якщо ви хочете використовувати модуль для свого проекту, вам доведеться встановити його локально. Встановлення модуля на глобальному рівні забезпечує лише більше команд у вашому терміналі, як, наприклад, у expressjs та express (1).
warchimede

@sgwilly Ви помиляєтесь у тому, що використовуєте node_modules в усьому світі - це навіть написано в docuemention - nodejs.org/api/modules.html#modules_all_together - функція вимагає () розумна ', тому що вона виглядає в різних місцях спробувати вирішити шлях для модуля, що включає глобальні node_modules
qodeninja

Я мав би бути більш конкретним: це правда, що вимагає () досить розумний, щоб знайти ваш глобально встановлений модуль. Він працюватиме, якщо всі ваші проекти залежать від тієї ж версії цього модуля. Тим не менш, вам може бути важко підтримувати проекти, спираючись на різні версії модулів, якщо ви керуєте залежностями лише в усьому світі. Ось чому найкраще завжди завжди встановлювати модулі локально, а встановлювати їх у всьому світі лише тоді, коли ви хочете отримати доступ до деяких зручних виконуваних команд.
warchimede

@sgwilly - дякую, що поділилися своїми думками тут - зокрема, цей проект є розповсюджуваним, тому не слід намагатися нічого оновлювати - фактично оновлення відбуватимуться через RPM (зверніть увагу, що RPM не NPM), а фактичні модулі node_ згортаються - Мені просто знадобився спосіб швидкого очищення системи, що б не завершилася установка обертів (в моєму середовищі розробників)
qodeninja

Відповіді:


168

Якщо ви використовуєте Bash, просто переключіться на папку, у якій є файл package.json, і запустіть наступне:

for package in `ls node_modules`; do npm uninstall $package; done;

У випадку глобально встановлених пакетів перейдіть у свою %appdata%/npmпапку (якщо в Windows) та запустіть ту саму команду.

EDIT: Ця команда переривається з npm 3.3.6 (Node 5.0). Зараз я використовую таку команду Bash, яку я відобразив у npm_uninstall_all у своєму .bashrc файлі:

npm uninstall `ls -1 node_modules | tr '/\n' ' '`

Доданий бонус? це швидше!

https://github.com/npm/npm/isissue/10187


1
Ви опублікували таку саму команду, що і відповідь на "Команда видалити всі модулі npm у всьому світі?". Як це можна зробити як у цій ситуації, так і в цій?
ніхто

@AndrewMedico Як це не підходить? Пакети, встановлені у вашому файлі package.json, будуть встановлені у вашій папці node_modules. Ця команда перенесе кожну підпапку у папку node_modules і запуститься npm uninstall <package>для кожної папки. Я це робив сам і це чудово працює!
jedmao

2
@UgoRobain гарне запитання. Як виявляється, деякі залежності стають справді глибокими. Принаймні, у файловій системі NTFS (Windows) виникають проблеми з видаленням каталогів, де ім'я шляху довше якогось обмеження, залишаючи ці фантомні каталоги, які ви не можете видалити. На щастя, npm uninstallопікується цим, саме тому цей трюк корисний.
jedmao

7
Ось що я робив для цього з повноваженнями:foreach($package in ls node_modules){npm uninstall $package}
JustMaier

1
Схоже, не працює на Windows. tr is not recognized
Overdrivr

78

Це працювало для мене:

командний рядок або gitbash у папку node_modules у вашому проекті, тоді виконайте:

npm uninstall *

Видалено всі локальні пакети для цього проекту.


Чи це також не видаляє глобальні встановлення?
shinzou

@shinzou Він не видалив глобальні встановлення для мене.
Тейлор Едмістон

1
На Mac 10.13.5 це видає багато помилок, як показано нижче. o У файлі, включеному з ../src/heapdump.cc:17: ../src/compat-inl.h:300:19: помилка: жоден член з ім'ям "GetCpuProfiler" у "v8 :: Isolate" повернути ізолят-> GetCpuProfiler () -> StartProfiling (title, record_samples); "
vikramvi

35

Для вікон перейдіть до node_modules dir та запустіть це у powerhell

npm uninstall (Get-ChildItem).Name 

Для мене це призводить до помилки "Командний рядок занадто довгий."
Даніель

29

Нещодавно я знайшов команду node, яка дозволяє видалити всі залежності розвитку таким чином:

npm prune --production

Як я вже згадував, ця команда видаляє лише пакети залежностей від розвитку. Принаймні, мені це допомогло не робити цього вручну.


8

Порада для користувачів Windows: Запустіть цю команду PowerShell з node_modulesбатьківського каталогу:

ls .\node_modules | % {npm uninstall $_}

6
// forcibly remove and reinstall all package dependencies
ren package.json package.json-bak
echo {} > package.json
npm prune
del package.json
ren package.json-bak package.json
npm i

Це по суті створює підроблений, порожній package.json, закликає npm pruneвидалити все в node_modules, відновлює початковий package.json і повторно встановлює все.

Деякі з інших рішень можуть бути більш елегантними, але я підозрюю, що це швидше і вичерпніше. В інших темах, яких я бачив, люди пропонують просто видалити каталог node_modules, але, принаймні, для Windows, це призводить до того, що npm задушиться згодом, оскільки каталог бін відсутній. Можливо, на Linux він відновиться належним чином, але не Windows.


1
У моєму випадку - мені не знадобився існуючий package.json (через запуск сценарію на CI після виконання npm-скриптів). Тому я просто перейшов із: "echo {}> package.json & npm prune"
Rikki

5

Насправді немає можливості зробити це, якщо ви хочете видалити пакунки з package.jsonпросто робити npm lsв тому самому каталозі, на який package.jsonпокладається та використовує, npm uninstall <name>або npm rm <name>для пакета, який ви хочете видалити.


8
Я знаю, як їх видалити окремо - просто було б більше сенсу, якби була команда запустити файл file.json так само, як працює npm install.
qodeninja

Ні, ми не хочемо видаляти кожен модуль вручну.
shinzou

1
  1. видалити небажані залежності з пакета.json
  2. npm i

" npm i" не буде встановлювати лише відсутній деп, він оновлює node_modules, щоб відповідати пакет.json


1

( Не повторюйте ці кроки, поки не прочитаєте все )

Для мене всі згадані рішення не спрацювали. Тож я пішов /usr/libі бігав туди

for package in `ls node_modules`; do sudo npm uninstall $package; done;

Але він також видалив npmпакунок і лише половину пакунків (поки він не досяг літери n).

Тож я спробував знову встановити вузол по керівництву вузлом.

# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

Але це не встановлено npmзнову.

Тому я вирішив перевстановити цілий вузол sudo apt-get remove nodejs І знову встановити по керівництву вище.

Зараз NPM знову працює, але глобальні модулі все ще є. Тому я перевірив вміст каталогу /usr/lib/node_modulesі, здається, єдине важливе тут npm. Тому я відредагував команду вище, щоб видалити все, крімnpm

for package in $(ls node_modules); do if [ "$package" != "npm" ]; then sudo npm uninstall $package; fi; done;

Він видалив усі модулі, які не були префіксом @. Тож я продовжив цикл для підкаталогів.

for package in $(ls node_modules); do if [  ${package:0:1} = \@ ]; then 
        for innerPackage in $(ls node_modules/${package}); do
                sudo npm uninstall "$package/$innerPackage";
        done;
fi; done;

Моя /usr/lib/node_modulesтепер містить лише npmі пов'язані пакети.


0

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

Ви можете видалити всі модулі node_, використовуючи єдину команду: -

npm uninstall `ls -1 node_modules | tr '/\n' ' '`


0

Спіггінг від VIKAS KOHLI та jedmao , ви можете це зробити

однорядкова версія:

npm uninstall `ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` `find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

багатошарова версія:

npm uninstall \
`ls -1 node_modules | grep -v ^@ | tr '/\n' ' '` \
`find node_modules/@* -type d -depth 1 2>/dev/null | cut -d/ -f2-3 | tr '\n' ' '`

0

Ще один ПРОСТИЙ варіант - видалити node_modules та package-lock.json

rm -rf node_modules
rm -rf package-lock.json

Після цього ви можете спробувати перевстановити пакети npm

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