128

如果我在我的应用程序根目录中定义了一个 package.json 文件并运行npm install -g它,它将安装 package.json 中定义的所有依赖项,全局。

然而,这似乎并不能反过来工作。

如果我npm uninstall -g在我的应用程序根目录中这样做,它会抛出一个错误,让我向它传递一个包名。

这不应该也卸载我安装的相同软件包吗?

难道我做错了什么?

4

15 回答 15

187

如果使用 Bash,只需切换到包含 package.json 文件的文件夹并运行以下命令:

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

对于全局安装的包,切换到您的%appdata%/npm文件夹(如果在 Windows 上)并运行相同的命令。

编辑:此命令与 npm 3.3.6(节点 5.0)中断。我现在正在使用以下 Bash 命令,我已将其映射到 .bashrc 文件中的 npm_uninstall_all :

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

注意:它将从 package.json 中删除所有依赖项列表,并且 package-lock.json 渲染npm install无用,因为没有列出要安装的依赖项。

增加奖金?它的速度更快!

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

于 2014-06-24T20:58:28.600 回答
102

这对我有用:

命令提示符或 gitbash 进入项目中的 node_modules 文件夹,然后执行:

npm uninstall *

删除了该项目的所有本地包。

于 2016-01-12T08:11:17.823 回答
37

对于 Windows 转到 node_modules 目录并在 powershell 中运行它

npm uninstall (Get-ChildItem).Name 
于 2015-11-25T10:01:43.950 回答
34

我最近发现了一个允许卸载所有开发依赖项的节点命令,如下所示:

npm prune --production

正如我所提到的,此命令仅卸载开发依赖包。至少它帮助我不必手动进行。

于 2017-01-24T17:30:22.777 回答
8

Windows 用户提示:从node_modules父目录中运行此 PowerShell 命令:

ls .\node_modules | % {npm uninstall $_}
于 2016-08-16T10:47:31.613 回答
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 目录,但至少对于 Windows,这会导致 npm 之后因为 bin 目录丢失而阻塞。也许在linux上它可以正确恢复,但不是windows。

于 2016-10-28T19:09:39.513 回答
5

实际上,如果您想从依赖和使用的同一目录中卸载软件包,package.json或者要删除要删除的软件包,实际上是没有选择的。npm lspackage.jsonnpm uninstall <name>npm rm <name>

于 2013-10-01T06:17:28.537 回答
4

dependencies首先,删除所有devDependenciespackage.json

二、运行npm install

就这么简单。

于 2020-11-09T01:27:26.260 回答
3

另一个简单的选项是删除 node_modules 和 package-lock.json

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

在此之后,您可以尝试重新安装 npm 包

于 2020-05-18T14:32:07.707 回答
2
  1. 从package.json中删除不需要的依赖项
  2. npm i

" npm i" 不仅会安装缺失的 deps,还会更新 node_modules 以匹配 package.json

于 2019-06-26T03:00:32.263 回答
1

在阅读完所有内容之前不要复制这些步骤

对我来说,所有提到的解决方案都不起作用。Soo我去/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和链接的包。

于 2019-10-06T22:33:22.683 回答
1

Powershell 用户: foreach($package in ls node_modules){npm uninstall $package}

谢谢@JustMailer

于 2019-06-11T21:04:43.803 回答
0

即使您不需要为此运行循环。

您可以使用唯一的单个命令删除所有 node_modules:-

npm uninstall `ls -1 node_modules | tr '/\n' ' '`
于 2018-12-27T13:42:59.460 回答
0

由于这仍然是 Googler 在搜索如何删除 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 中删除每个模块。

于 2020-09-10T04:40:41.527 回答
0

捎带VIKAS KOHLIjedmao,你可以这样做

单行版本:

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' ' '`
于 2020-03-06T06:18:44.017 回答