Как удалить все зависимости, перечисленные в package.json (NPM)?
Если у меня есть файл package.json, определенный в корне моего приложения, и запустите npm install -g
он установит все зависимости, определенные в package.json, глобально.
Тем не менее, это не похоже на работу в обратном направлении.
Если я сделаю npm uninstall -g
в моем корне приложения он выдает ошибку, освобождая меня от передачи имени пакета.
Разве это не должно удалить те же пакеты, которые я установил?
Я делаю что-то неправильно?
16 ответов
Если вы используете Bash, просто переключитесь в папку с вашим файлом package.json и выполните следующее:
for package in `ls node_modules`; do npm uninstall $package; done;
В случае глобально установленных пакетов, переключитесь на %appdata%/npm
папку (если в Windows) и запустите ту же команду.
РЕДАКТИРОВАТЬ: Эта команда прерывается с npm 3.3.6 (Node 5.0). Сейчас я использую следующую команду Bash, которую я сопоставил с npm_uninstall_all в моем файле.bashrc:
npm uninstall `ls -1 node_modules | tr '/\n' ' '`
Добавлен бонус? это намного быстрее!
Это сработало для меня:
Командная строка или Gitbash в папку node_modules в вашем проекте, а затем выполните:
npm uninstall *
Удалены все локальные пакеты для этого проекта.
Недавно я нашел команду узла, которая позволяет удалить все зависимости разработки следующим образом:
npm prune --production
Как я уже упоминал, эта команда только удаляет пакеты зависимостей разработки. По крайней мере, это помогло мне не делать это вручную.
Для окон перейдите в каталог node_modules и запустите его в powershell
npm uninstall (Get-ChildItem).Name
Другой ПРОСТОЙ вариант - удалить node_modules и package-lock.json.
rm -rf node_modules
rm -rf package-lock.json
После этого вы можете попробовать переустановить пакеты npm.
Совет для пользователей Windows: выполните эту команду PowerShell изнутри node_modules
родительский каталог:
ls .\node_modules | % {npm uninstall $_}
// 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 он восстанавливается должным образом, но не Windows.
На самом деле нет никакой возможности сделать это, если вы хотите удалить пакеты из package.json
просто сделай npm ls
в том же каталоге, что package.json
полагается и использовать npm uninstall <name>
или же npm rm <name>
для пакета, который вы хотите удалить.
Сначала удалите все пакеты из
dependencies
и
devDependencies
в
package.json
Во-вторых, беги
npm install
Так просто.
- удалить нежелательные зависимости из package.json
npm i
"npm i
"не только установит недостающие deps, но и обновит node_modules в соответствии с package.json.
(Не повторяйте эти шаги, пока не прочитаете все)
Для меня все упомянутые решения не сработали. Так я пошел в/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
и связанные пакеты.
Пользователи Powershell:
foreach($package in ls node_modules){npm uninstall $package}
Спасибо @JustMailer
VIKAS KOHLI на 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' ' '`
Поскольку это все еще первый результат поиска в Google, как удалить все модули в NPM, я решил поделиться небольшим скриптом для Powershell, чтобы удалить все зависимости через NPM:
#Create a Packages Array to add package names to
$Packages = New-Object System.Collections.ArrayList
#Get all Production Dependencies by name
(Get-Content .\Package.json | ConvertFrom-JSON).dependencies.psobject.properties.name |
ForEach-Object { $Packages.Add($_) | Out-Null }
#Get all Dev Dependencies by name
(Get-Content .\Package.json | ConvertFrom-JSON).devDependencies.psobject.properties.name |
ForEach-Object { $Packages.Add($_) | Out-Null }
#Remove each package individually
Foreach($Package in ($Packages | select -unique))
{ npm uninstall $Package }
#Clean up any remaining packages
$Modules = Get-ChildItem "node_modules"
if($Modules)
{ $Modules | ForEach-Object { Remove-Item ".\node_modules\$_" -Force -Recurse } }
Это запускает более конкретное удаление, а не удаление каждого модуля из node_modules по отдельности.
Даже вам не нужно запускать цикл для этого.
Вы можете удалить все node_modules, используя единственную команду:-
npm uninstall `ls -1 node_modules | tr '/\n' ' '`
Вам нужно просто удалитьnode_modules
папку, перейдите в папку приложения angular, затем выполните одну из этих команд.
- На окнах:
rmdir /s node_modules
- В линуксе:
rm -r node_modules/