Как удалить все зависимости, перечисленные в 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

  1. удалить нежелательные зависимости из package.json
  2. 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 и связанные пакеты.