如果我在我的应用程序根目录中定义了一个 package.json 文件并运行npm install -g
它,它将安装 package.json 中定义的所有依赖项,全局。
然而,这似乎并不能反过来工作。
如果我npm uninstall -g
在我的应用程序根目录中这样做,它会抛出一个错误,让我向它传递一个包名。
这不应该也卸载我安装的相同软件包吗?
难道我做错了什么?
如果我在我的应用程序根目录中定义了一个 package.json 文件并运行npm install -g
它,它将安装 package.json 中定义的所有依赖项,全局。
然而,这似乎并不能反过来工作。
如果我npm uninstall -g
在我的应用程序根目录中这样做,它会抛出一个错误,让我向它传递一个包名。
这不应该也卸载我安装的相同软件包吗?
难道我做错了什么?
如果使用 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
无用,因为没有列出要安装的依赖项。
增加奖金?它的速度更快!
这对我有用:
命令提示符或 gitbash 进入项目中的 node_modules 文件夹,然后执行:
npm uninstall *
删除了该项目的所有本地包。
对于 Windows 转到 node_modules 目录并在 powershell 中运行它
npm uninstall (Get-ChildItem).Name
我最近发现了一个允许卸载所有开发依赖项的节点命令,如下所示:
npm prune --production
正如我所提到的,此命令仅卸载开发依赖包。至少它帮助我不必手动进行。
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_modules 中的所有内容,恢复原始 package.json 并重新安装所有内容。
其他一些解决方案可能更优雅,但我怀疑这更快更详尽。在其他线程上,我看到人们建议只删除 node_modules 目录,但至少对于 Windows,这会导致 npm 之后因为 bin 目录丢失而阻塞。也许在linux上它可以正确恢复,但不是windows。
实际上,如果您想从依赖和使用的同一目录中卸载软件包,package.json
或者要删除要删除的软件包,实际上是没有选择的。npm ls
package.json
npm uninstall <name>
npm rm <name>
dependencies
首先,删除所有devDependencies
包package.json
二、运行npm install
就这么简单。
另一个简单的选项是删除 node_modules 和 package-lock.json
rm -rf node_modules
rm -rf package-lock.json
在此之后,您可以尝试重新安装 npm 包
npm i
" npm i
" 不仅会安装缺失的 deps,还会更新 node_modules 以匹配 package.json
(在阅读完所有内容之前不要复制这些步骤)
对我来说,所有提到的解决方案都不起作用。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
和链接的包。
Powershell 用户:
foreach($package in ls node_modules){npm uninstall $package}
谢谢@JustMailer
即使您不需要为此运行循环。
您可以使用唯一的单个命令删除所有 node_modules:-
npm uninstall `ls -1 node_modules | tr '/\n' ' '`
由于这仍然是 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 中删除每个模块。
单行版本:
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' ' '`