Как удалить все зависимости, перечисленные в package.json(NPM)?
Если у меня есть файл package.json, определенный в корне моего приложения, и запустите npm install -g
, он установит все зависимости, определенные в package.json, globablly.
Однако это не работает обратным образом.
Если я выполняю npm uninstall -g
в корне моего приложения, он выдает ошибку, заставляя меня передать ему имя пакета.
Не следует ли также удалить те же пакеты, которые я установил?
Я что-то делаю неправильно?
Ответы
Ответ 1
Если вы используете 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/issues/10187
Ответ 2
Это сработало для меня:
или gitbash в папку node_modules в вашем проекте, выполните:
npm uninstall *
Удалены все локальные пакеты для этого проекта.
Ответ 3
Для окон перейдите в node_modules dir и запустите это в powershell
npm uninstall (Get-ChildItem).Name
Ответ 4
Недавно я нашел команду узла, которая позволяет удалить все зависимости разработки следующим образом:
npm prune --production
Как я уже упоминал, эта команда только удаляет пакеты зависимостей разработки. По крайней мере, это помогло мне не делать это вручную.
Ответ 5
На самом деле нет возможности сделать это, если вы хотите удалить пакеты из package.json
просто выполните npm ls
в том же каталоге, что package.json
полагается и использует npm uninstall <name>
или npm rm <name>
для пакета, который вы хотите для удаления.
Ответ 6
Совет для пользователей Windows: запустите эту команду PowerShell из родительского каталога node_modules
:
ls .\node_modules | % {npm uninstall $_}
Ответ 7
// 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, но, по крайней мере, для окон, это заставляет npm задыхаться, потому что каталог bin отсутствует. Возможно, на linux он восстанавливается правильно, но не окна.
Ответ 8
Даже вам не нужно запускать цикл для этого.
Вы можете удалить все node_modules, используя единственную команду: -
npm uninstall 'ls -1 node_modules | tr '/\n' ' ''
Ответ 9
Пользователи Powershell: foreach($package in ls node_modules){npm uninstall $package}
Спасибо @JustMailer
Ответ 10
- удалить нежелательные зависимости из package.json
-
npm i
" npm i
" не только устанавливает отсутствующие deps, но и обновляет node_modules в соответствии с package.json
Ответ 11
(Не повторяйте эти шаги, пока не прочитаете все)
Для меня все упомянутые решения не сработали. Итак, я пошел в /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
и связанные пакеты.