命令全局删除所有npm模块?


381

是否有删除所有全局npm模块的命令?如果没有,您有什么建议?

Answers:


501

以下命令删除所有全局npm模块。注意:这在Windows上不起作用。有关可用的Windows版本,请参见Ollie Bennett的答案

npm ls -gp --depth=0 | awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}' | xargs npm -g rm

下面是它的工作原理:

  • npm ls -gp --depth=0列出所有全局顶级模块(有关ls,请参阅cli文档
  • awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}'打印实际上不是npm本身的所有模块(不以结尾/npm
  • xargs npm -g rm 全局删除前一个管道上的所有模块

3
不要成为awk的高尔夫球手,这可以在没有grep的单个awk命令中完成:awk -F' |@' '/@/ {if ($(NF-1) != "npm") {print $(NF-1)}}' 说明:在空格或@上拆分,仅将匹配的行与@匹配,模块名称将是倒数第二个匹配($(NF-1)),因此仅打印如果不是的话npm
Fotios

28
警告:新版本不会过滤掉npm模块。您不想删除那个。
neverfox 2014年

9
我还运行了新版本,但未阅读评论。始终阅读评论。以下是恢复NPM的方法:curl npmjs.org/install.sh | sh
Jack Allan 2014年

12
哇。NPM并不容易卸载东西。使用bundler和gems,卸载所有内容都很简单,事实上,您必须使用grep,这是一个可怕的设计。有没有更简单的方法可以做到这一点?谁真正记得答案中要求的代码?
布莱恩

15
@neverfox等:已修复,不再删除npm本身。抱歉给您带来不便
凯斯特纳德

268

对于使用Windows的用户,删除所有全局安装的npm软件包的最简单方法是删除以下内容:

C:\Users\username\AppData\Roaming\npm

您可以通过输入%appdata%/npm资源管理器,运行提示或从开始菜单快速到达那里。


5
谢谢,关于npm-cache,我也应该删除它吗?
尼尔,

2
如果npm文件夹在那里,请不要删除
AutomatedMike

在更高版本的npm中,似乎%USERPROFILE%\AppData\npm没有使用roaming
利亚姆'18

1
我重新安装了所有软件包,npm install再次运行时遇到EINTEGRITY错误。我也必须删除我的package-lock.json文件。
ToastyMallows 18-4-25的

对于使用scoop在Windows中的用户,路径为:C:\ Users \ username \ scoop \ apps \ nodejs \ current \ bin \ node_modules
Ariel Mirra

176

我尝试了Kai Sternad的解决方案,但对我来说似乎并不完美。awk在deps树本身的最后一个之后,还有许多特殊符号。

因此,我想出了自己对Kai Sternad解决方案的修改(在Cashmere想法的帮助下):

npm ls -gp --depth=0 | awk -F/node_modules/ '{print $2}' | grep -vE '^(npm|)$' | xargs -r npm -g rm

npm ls -gp --depth=0可分析的格式列出所有全局安装的npm模块:

/home/leonid/local/lib
/home/leonid/local/lib/node_modules/bower
/home/leonid/local/lib/node_modules/coffee-script
...

awk -F/node_modules/ '{print $2}' 从路径中提取模块名称,形成所有全局安装的模块的列表。

grep -vE '^(npm|)$' 删除npm本身和空白行。

xargs -r npm -g rm调用npm -g rm列表中的每个模块。

Kai Sternad的解决方案一样,它只能在* nix下工作。


1
这些文件存储在哪里,我讨厌这种方法。某处不只是一个全局package.json吗?
埃文·卡罗尔

2
@EvanCarroll Nope,没有这样的文件,但是npm将其所有全局模块安装到同一目录中。确切位置可能有所不同,但通常是/usr/local/lib/node_modules
Leonid Beschastny 2014年

3
仅供参考,这也将删除npm
BrDaHa 2014年

11
此命令在OSX上有效,并且不会删除npmnpm ls -gp --depth=0 | awk -F/node_modules/ '{print $2}' | grep -vE '^(npm)$' | xargs npm -g rm
real_ate 2015年

2
此命令无法处理有范围的程序包(如@angular/cli)。我为其添加了另一个匹配器,awk并且对我来说有效的命令如下所示:npm ls -gp --depth=0 | awk -F/ '/node_modules\/@/ {print $(NF-1)"/"$NF} /node_modules\/[^@]/ && !/\/npm$/ {print $NF}' | xargs npm -g rm
Jack Q

64
sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}'  | sudo xargs npm remove -g

为我工作

  • sudo npm list -g --depth=0. 列出所有已安装的顶层
  • awk -F ' ' '{print $2}' 摆脱├──
  • awk -F '@' '{print $1}' 在'@'之前得到部分
  • sudo xargs npm remove -g 全局删除软件包

截至14年6月,此版本对我来说效果最好。唯一的增加可能是从列表中过滤掉“ UNMET”依赖项,但这并不重要,就像npm remove UNMETNOOP一样。
kangax 2014年

4
会增加,grep -v npm这样npm本身就不会被删除:sudo npm list -g --depth=0. | grep -v npm | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g
brauliobo

顺其自然,您的npm!
所有'sVаиітy17年

26

对于使用Powershell的用户

npm -gp ls --depth=0 | ForEach-Object { Get-Item $_ } | Where { $_.Name -ne 'npm' } | ForEach-Object { npm rm -g $_.Name }

清除缓存:

npm cache clear

22

只需切换到您的%appdata%/npm目录并运行以下命令即可...

for package in `ls node_modules`; do npm uninstall $package; done;

编辑:此命令中断与npm 3.3.6(节点5.0)。我现在正在使用以下Bash命令,该命令已映射到.bashrc文件中的npm_uninstall_all:

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

增加奖金了吗?它更快!

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

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


喜欢这个。更快,更简单的:)我只是用的grep -v npmn的前tr
apnerve


14

如果要删除所有已安装的软件包,则可以使用npm -g ls命令查找它们,然后npm -g rm删除它们。


7

如果安装了jq,则即使没有grep / awk / sed也可以使用:

npm ls -g --json --depth=0 |
  jq -r '.dependencies|keys-["npm"]|join("\n")' |
  xargs npm rm -g

在Debian和Debian上,您可以使用以下命令安装jq

sudo apt-get install jq

这是一个恰当的答案,具有适当的json风格。
理查德·阿约特

如果需要sudo,则:npm ls -g --json --depth=0 | jq -r '.dependencies|keys-["npm"]|join("\n")' | xargs sudo npm rm -g
罗杰(Roger)

5

OP未指定OS。对于Windows,此脚本可用于对本地和用户的全局模块和缓存进行核对。

我在linux上注意到,全局根目录真正是系统全局目录,而不是给定用户。因此,对于共享系统,删除全局根可能不是一个好主意。除此之外,如果有兴趣,我可以将脚本移植到bash

对于Windows,请保存到cmd文件以运行。

@ECHO OFF
SETLOCAL EnableDelayedExpansion 
SETLOCAL EnableExtensions

SET /A ecode=0

:: verify
SET /P conf="About to delete all global and local npm modules and clear the npm cache. Continue (y/[n])?
IF /I NOT "%conf%"=="y" (
  ECHO operation aborted
  SET /A ecode=!ecode!+1
  GOTO END
)

:: wipe global and local npm root
FOR %%a IN ("" "-g") DO (

  :: get root path into var
  SET cmd=npm root %%~a
  FOR /f "usebackq tokens=*" %%r IN (`!cmd!`) DO (SET npm_root=%%r)

  :: paranoid
  ECHO validating module path "!npm_root!"
  IF "!npm_root:~-12!"=="node_modules" (
    IF NOT EXIST "!npm_root!" (
      ECHO npm root does not exist "!npm_root!"
    ) ELSE (
      ECHO deleting "!npm_root!" ...
      :: delete
      RMDIR /S /Q "!npm_root!"
    )
  ) ELSE (
      ECHO suspicious npm root, ignoring "!npm_root!"
  )
)

:: clear the cache
ECHO clearing the npm cache ...
call npm cache clean

:: done
ECHO done

:END

ENDLOCAL & EXIT /b %ecode%

3

使用以下代码卸载任何软件包:

npm rm -g <package_name>

1
问题清楚地表明了ALL,而不是特定的软件包名称。
Polv

2

你们都做得很好。这是将建议合并为一个行代码。

npm rm -g `npm ls -gp --depth=0 | awk -F/node_modules/ '{print $2}' | tr '/\n' ' '`

有什么不同吗?卸载将通过单个命令完成,例如:npm rm -g *** *** ***


2

您可以在以下位置找到所有已安装的npm软件包:

C:\Users\username\AppData\Roaming\npm

并删除要删除的npm的内容。

如果未显示AppData,则表明它已隐藏,您可以转到在文件浏览器中查看并检查“隐藏”项目,然后在其中可以看到所有隐藏的文件夹。


1

好吧,如果您在Windows上,并且想要删除/卸载所有node_modules,则需要执行以下步骤。

  1. 转到Windows命令提示符
  2. 导航到node_modules目录(不在node_modules文件夹内
  3. 键入以下命令并等待1-2分钟,它将卸载node_module内的所有目录

     rmdir /s /q node_modules

希望这对Windows有所帮助


1

如果您有Intellij Webstorm,则可以使用其内置的图形软件包管理器。

以根用户身份打开它并创建一个空项目。去

文件>设置>语言和框架> Node.js和NPM

在那里,您将看到所有已安装的软件包。卸载很容易,您可以选择和取消选择要卸载的任何软件包,也可以按Ctrl + a组合键。


1

对于 yarn global

nano ~/.config/yarn/global/package.json
<Manually remove all packages from package.json>
yarn global add

或者,如果您不在乎里面到底有什么 package.json

echo {} >  ~/.config/yarn/global/package.json && yarn global add

这也应该适用于NPM,但是我不确定NPM全局存储在哪里。


0
npm ls -gp | awk -F/ '/node_modules/&&!/node_modules.*node_modules/&&!/npm/{print $NF}' | xargs npm rm -g


0

这是我尝试过的一种更优雅的解决方案,我让npm为我完成所有工作。

# On Linux Mint 19.1 Cinnamon
# First navigate to where your global packages are installed.

$ npm root # returns /where/your/node_modules/folder/is
$ cd /where/your/node_modules/folder/is # i.e for me it was cd /home/user/.npm-packages/lib/node_modules

然后,如果您这样做npm uninstall,则npm remove这些模块将被视为项目的正常依赖项。完成后,它甚至生成package-lock.json文件:

$ npm remove <package-name> # you may need sudo if it was installed using sudo  

-1

sed解决方案

npm -gp ls | sed -r '/npm$|(node_modules.*){2,}/d; s:.*/([^/]+)$:\1:g' | xargs npm rm -g

-5

只需将您的控制台中:

sudo npm list -g --depth = 0。| awk -F'''{print $ 2}'| awk -F'@''{print $ 1}'| sudo xargs npm删除-g

它为我工作...


1
在同一页面上,这里已经提到了解决方案的精确副本。
ivarni
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.