Node.js 如何卸载package.json(NPM)中列出的所有依赖项?
如果我在我的应用程序根目录中定义了一个package.json文件,并运行Node.js 如何卸载package.json(NPM)中列出的所有依赖项?,node.js,npm,uninstallation,Node.js,Npm,Uninstallation,如果我在我的应用程序根目录中定义了一个package.json文件,并运行npm install-g,它将全局安装package.json中定义的所有依赖项 然而,这似乎并没有起到相反的作用 如果我在我的应用程序根目录中执行npm uninstall-g,它将抛出一个错误,并将我的程序包名传递给它 这难道不应该卸载我安装的相同软件包吗 我做错了什么吗?实际上,如果您想从包中卸载包,没有选择。json只需在包所依赖的同一目录下执行npm ls,并对要删除的包使用npm uninstall或npm
npm install-g
,它将全局安装package.json中定义的所有依赖项
然而,这似乎并没有起到相反的作用
如果我在我的应用程序根目录中执行npm uninstall-g
,它将抛出一个错误,并将我的程序包名传递给它
这难道不应该卸载我安装的相同软件包吗
我做错了什么吗?实际上,如果您想从
包中卸载包,没有选择。json
只需在包所依赖的同一目录下执行npm ls
,并对要删除的包使用npm uninstall
或npm rm
。如果使用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\u uninstall\u all:
注意:它将从package.json和package-lock.json中删除所有依赖项列表,呈现npm安装
无用,因为没有列出要安装的依赖项
额外奖金?快多了
对于windows,请转到node_modules dir并在powershell中运行此命令
npm uninstall (Get-ChildItem).Name
这对我很有用:
命令提示符或gitbash插入项目中的node_modules文件夹,然后执行:
npm uninstall *
已删除该项目的所有本地包。Windows用户提示:从节点\u模块中运行此PowerShell命令。
父目录:
ls .\node_modules | % {npm uninstall $_}
这实际上创建了一个假的空package.json,调用npm prune
删除节点模块中的所有内容,恢复原始package.json并重新安装所有内容
其他一些解决方案可能更优雅,但我怀疑这是更快和详尽的。在其他线程中,我看到有人建议只删除node_modules目录,但至少在windows中,这会导致npm随后阻塞,因为bin目录丢失。可能在linux上它得到了正确的恢复,但在windows上没有。我最近发现一个node命令,允许卸载所有开发依赖项,如下所示:
npm prune --production
正如我提到的,这个命令只卸载开发依赖项包。至少它帮助我不用手动操作。即使你不需要为此运行循环
只需使用一个命令即可删除所有节点_模块:-
npm uninstall `ls -1 node_modules | tr '/\n' ' '`
Powershell用户:
foreach($ls node_模块中的包){npm uninstall$package}
谢谢@JustMailer
从包.json中删除不需要的依赖项
npm i
“npm i
”不仅会安装缺失的DEP,还会更新节点单元以匹配包。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\u 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_模块
现在只包含npm
和链接的包。
单行版本:
npm卸载'ls-1节点单元模块| grep-v^ | tr'/\n'''`查找节点单元单元/*-类型d-深度12>/dev/null | cut-d/-f2-3 | tr'\n''`
多行版本:
npm卸载\
`ls-1节点| grep-v^@|tr'/\n''模块\
`查找节点_modules/@*-type d-depth 12>/dev/null | cut-d/-f2-3 | tr'\n''`
另一个简单的选项是删除node_modules和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 } }
这将运行更具体的删除操作,而不是单独从节点模块中删除每个模块。首先,从package.json中的依赖项和devdependency中删除所有包
其次,运行npm安装
这很简单。仅供参考,我从不使用npm-g的理由。请记住,如果要为项目使用模块,必须在本地安装。全局安装模块只会在终端中提供更多的命令,例如expressjs和express(1)。@sgwilly必须全局使用node_模块是错误的,它甚至在文档中这样说--require()函数是“智能”的,因为它在不同的位置查找,以尝试解析包括全局节点_modules在内的模块的路径。我应该更具体一些:require()确实足够智能,可以找到全局安装的模块。如果您的所有项目都依赖于上述模块的同一版本,那么它将起作用。然而,如果您需要,您可能很难维护依赖于不同模块版本的项目
rm -rf node_modules
rm -rf package-lock.json
#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 } }