【问题标题】:How do you uninstall all dependencies listed in package.json (NPM)?如何卸载 package.json (NPM) 中列出的所有依赖项?
【发布时间】:2013-10-07 00:40:56
【问题描述】:

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

但是,这似乎不能反过来。

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

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

我是不是做错了什么?

【问题讨论】:

  • 仅供参考,我从不使用 npm -g 的理由。 peterlyons.com/problog/2012/09/…
  • 记住,如果你想为你的项目使用一个模块,你必须在本地安装它。全局安装模块只会在终端中提供更多命令,例如 expressjs 和 express(1)。
  • @sgwilly 你错了必须全局使用 node_modules - 它甚至在文档中这样说 - nodejs.org/api/modules.html#modules_all_together - require() 函数很“智能”,因为它可以在不同的位置查看尝试解析包含全局 node_modules 的模块的路径
  • 我应该更具体一点:确实 require() 足够聪明,可以找到您全局安装的模块。如果您的所有项目都依赖于该模块的相同版本,它将起作用。然而,如果你只在全局范围内管理依赖项,你可能很难维护依赖于不同模块版本的项目。这就是为什么最好总是在本地安装模块,并且只有在您想要访问一些方便的可执行命令时才全局安装它们。
  • @sgwilly - 感谢您在这里分享您的想法 - 这个项目特别是可分发的,因此它不应该尝试更新任何内容 - 实际更新将通过 RPM 进行(注意 RPM 不是 NPM)并且实际的 node_modules 是收缩包装的——我只需要一种方法来快速清理 rpm 最终安装的系统(在我的开发环境中)

标签: node.js npm uninstallation


【解决方案1】:

如果使用 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 无用,因为没有列出要安装的依赖项。

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

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

【讨论】:

  • 您发布了与“全局删除所有 npm 模块的命令?”的答案完全相同的命令。在那种情况和这种情况下,这怎么可能是合适的做法?
  • @AndrewMedico 怎么不合适?安装在你的 package.json 文件中的包将安装在你的 node_modules 文件夹中。此命令会将每个子文件夹带到 node_modules 文件夹并为每个文件夹运行 npm uninstall <package>。我自己做了这个,效果很好!
  • @UgoRobain 好问题。事实证明,一些依赖关系变得非常深。至少在 NTFS 文件系统 (Windows) 上,删除路径名超过某种限制的目录时会出现问题,从而留下无法删除的幻影目录。幸运的是,npm uninstall 可以解决这个问题,这就是这个技巧很有用的原因。
  • 这是我以前用 powershell 做的:foreach($package in ls node_modules){npm uninstall $package}
  • 似乎不适用于 Windows。 tr is not recognized
【解决方案2】:

这对我有用:

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

npm uninstall *

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

【讨论】:

  • 这不是也删除全局安装吗?
  • @shinzou 它没有为我删除全局安装。
  • 在 Mac 10.13.5 上,这会引发很多错误,如下所示 "> heapdump@0.3.9 install /Users/vikramanna/node_modules/heapdump > node-gyp rebuild CXX(target) Release/obj. target/addon/src/heapdump.o 在 ../src/heapdump.cc:17 中包含的文件中:../src/compat-inl.h:300:19:错误:在 'v8 中没有名为 'GetCpuProfiler' 的成员::Isolate' return isolate->GetCpuProfiler()->StartProfiling(title, record_samples);"
【解决方案3】:

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

npm uninstall (Get-ChildItem).Name 

【讨论】:

  • 对我来说,这会导致错误“命令行太长。”
【解决方案4】:

我最近发现了一个node命令,可以卸载所有的开发依赖,如下:

npm prune --production

正如我所提到的,此命令仅卸载开发依赖包。至少它帮助我不必手动操作。

【讨论】:

    【解决方案5】:

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

    ls .\node_modules | % {npm uninstall $_}
    

    【讨论】:

      【解决方案6】:
      // 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 脚本后在 CI 上运行脚本..)所以我只是选择了:“echo {} > package.json”。 json & npm 修剪"
      【解决方案7】:

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

      【讨论】:

      • 我知道如何单独删除它们——如果有一个命令可以像 npm install 一样对 package.json 文件运行,那就更有意义了。
      • 不,我们不想手动卸载每个模块。
      【解决方案8】:

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

      其次,运行npm install

      就这么简单。

      【讨论】:

      • 没有删除所有文件夹,但删除了大部分文件,让文件资源管理器能够删除其余文件。
      【解决方案9】:

      另一个简单的选项是删除 node_modules 和 package-lock.json

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

      之后你可以尝试重新安装 npm 包

      【讨论】:

      • 感谢您的建议。我没有全局包。大多数回复都在谈论 -g 选项!由于对 nodejs/npm 了解不够,我很难摆脱所有本地包,因此我从几个不同的目录中执行了“npm install this-and-that”。当我使用“npm uninstall ”时,“npm ls”仍然显示一些包。我是 shell 程序员,所以在“npm ls”输出的每个可以想象的部分都尝试了“npm uninstall”。没有人能摆脱所有的包裹。累了,但找到了这个建议并在 5 分钟内解决了我的问题。谢谢苛刻。
      • 我不知道 package.json、package-lock.json、node_modules 的用途、依赖关系、本地/全局差异,或者 nodejs/npm 是如何工作的。我使用另一个程序所需的 nodejs 模块。由于我从不同的目录中安装了许多带有“npm install”的不同模块,因此我想一次摆脱所有这些模块。其他答案都没有谈论这个。在 linux 上使用这个和 'find' 命令,我能够在 5 分钟内摆脱一切。不知道为什么还没有人觉得这很有帮助。
      【解决方案10】:
      1. package.json 中删除不需要的依赖项
      2. npm i

      "npm i" 不仅会安装缺失的 deps,还会更新 node_modules 以匹配 package.json

      【讨论】:

        【解决方案11】:

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

        感谢@JustMailer

        【讨论】:

          【解决方案12】:

          在阅读完所有内容之前不要重复这些步骤

          对我来说,所有提到的解决方案都不起作用。 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 和链接的包。

          【讨论】:

            【解决方案13】:

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

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

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

            【讨论】:

              【解决方案14】:

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

              【讨论】:

                【解决方案15】:

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

                【讨论】:

                  猜你喜欢
                  • 2018-11-07
                  • 1970-01-01
                  • 2013-01-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-08-02
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-10-12
                  相关资源
                  最近更新 更多