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

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

然而,这似乎并不适用于相反的情况。

如果我在应用程序根目录中执行 npm uninstall -g,它会抛出一个错误,希望我传递给它一个包名。

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

我做错什么了吗?

239628 次浏览

实际上没有这样做的选项,如果您想从 package.json卸载包,只需在 package.json所依赖的同一目录上执行 npm ls,并对您想要卸载的包使用 npm uninstall <name>npm rm <name>

如果使用 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 命令,我已经将其映射到。Bashrc 文件:

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

额外奖励? 它的方式更快!

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

对于 windows,转到 node _ module 目录并在 powershell 中运行它

npm uninstall (Get-ChildItem).Name

这对我很有效:

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

npm uninstall *

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

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

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 _ module 中的所有内容,恢复原来的 package.json 并重新安装所有内容。

其他一些解决方案可能更加优雅,但我怀疑这种方法更加快速和详尽。在其他线程中,我看到有人建议只删除 node _ module 目录,但是至少对于 windows 来说,这会导致 npm 在之后窒息,因为 bin 目录丢失了。也许在 linux 上可以正确恢复,但是在 windows 上不行。

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

npm prune --production

正如我提到的,这个命令只卸载开发依赖包。至少让我不用手动操作。

即使是你也不需要为此而运行循环。

您可以使用唯一的命令-删除所有 node _ module

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

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

谢谢@JustMailer

  1. 包裹 Json中删除不需要的依赖项
  2. npm i

npm i”不仅会安装缺失的 deps,还会更新 node _ module 以匹配 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和链接包。

背着 VIKAS KOHLI陛下,你可以做到这一点

单行版本:

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

另一个 SIMPLE 选项是删除 node _ module 和 package-lock. json

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

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

由于这仍然是 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 _ module 中删除每个模块。

首先,从 package.json中的 dependenciesdevDependencies中删除所有包

第二,运行 npm install

就这么简单。

您只需要删除 node_modules文件夹,导航到您的角应用程序文件夹,然后运行此命令之一。

  • 在窗户上:
rmdir /s node_modules
  • 在 linux 上:
rm -r node_modules/