如何卸载package.json(NPM)中列出的所有依赖项?

时间:2013-10-01 00:55:45

标签: node.js npm uninstall

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

然而,这似乎并没有反过来。

如果我在我的应用程序根目录中执行npm uninstall -g,则会抛出错误,并告诉我将包名称传递给它。

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

我做错了吗?

13 个答案:

答案 0 :(得分:145)

如果使用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' ' '`

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

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

答案 1 :(得分:59)

这对我有用:

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

npm uninstall *

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

答案 2 :(得分:33)

对于windows,请转到node_modules目录并在powershell中运行

UITextFieldTest

答案 3 :(得分:6)

实际上没有选项可以执行此操作,如果您要从package.json卸载软件包,只需在npm ls依赖并使用package.json的同一目录上执行npm uninstall <name>npm rm <name>用于您要删除的包。

答案 4 :(得分:3)

// 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。

答案 5 :(得分:1)

另一个SIMPLE选项是删除node_modules和package-lock.json

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

此后,您可以尝试重新安装npm软件包

答案 6 :(得分:0)

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

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

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

答案 7 :(得分:0)

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

感谢@JustMailer

答案 8 :(得分:0)

  1. package.json
  2. 中删除不需要的依赖项
  3. npm i

npm i”不仅会安装缺少的dep,还会更新node_modules以匹配package.json

答案 9 :(得分:0)

在您阅读完所有内容之前,请勿重复这些步骤

对我来说,所有提到的解决方案都行不通。如此,我去了/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和链接的程序包。

答案 10 :(得分:0)

Pi带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' ' '`

答案 11 :(得分: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中删除每个模块。

答案 12 :(得分:0)

首先,从dependencies的{​​{1}}和devDependencies中删除所有软件包

第二,运行package.json

就这么简单。