如果我在我的应用程序根目录中定义了package.json文件并运行npm install -g
,它将安装package.json,globablly中定义的所有依赖项。
然而,这似乎并没有反过来。
如果我在我的应用程序根目录中执行npm uninstall -g
,则会抛出错误,并告诉我将包名称传递给它。
这不应该卸载我安装的相同软件包吗?
我做错了吗?
答案 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' ' '`
添加奖金?它的速度更快!
答案 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)
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 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' ' '`
答案 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
就这么简单。