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

Ehe*_*Tov 358 node.js npm

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

Kai*_*nad 477

以下命令将删除所有全局npm模块.注意:这不适用于Windows.对于正常运行的Windows版本,请参阅Ollie Bennett的答案.

npm ls -gp --depth=0 | awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}' | xargs npm -g rm
Run Code Online (Sandbox Code Playgroud)

下面是它的工作原理:

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

  • 警告:新版本不会过滤掉npm模块.你不想删除那个. (28认同)
  • @neverfox和其他人:固定,npm本身不再被删除.抱歉给你带来不便 (15认同)
  • 我也没有阅读评论就运行了新版本.总是阅读评论.以下是如何恢复NPM:curl https://www.npmjs.org/install.sh | SH (9认同)
  • 哇.NPM不容易卸载东西.使用捆绑器和宝石,卸载所有东西都很简单,你必须使用grep这样的事实是一个可怕的设计.有更简单的方法吗?谁真的记得答案中要求的代码? (8认同)
  • 不要成为awk高尔夫球员,这可以在没有grep的单个awk命令中完成:`awk -F'| @''/ @/{if($(NF-1)!="npm"){print $ (NF-1)}}'`说明:拆分空格或@,只匹配@的行,模块名称将是倒数第二个匹配(`$(NF-1)`),所以只有打印才能`npm` (3认同)
  • 这不会删除名称中带有 / 的模块,例如 @angular/cli。 (2认同)

Oll*_*ett 248

对于那些使用Windows的人来说,删除所有全局安装的npm包的最简单方法是删除以下内容:

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

您可以通过键入%appdata%(在资源管理器,运行提示或开始菜单中)快速到达此处.

  • @Neil尝试运行`npm cache clear` (37认同)
  • 对于npm 5+,使用`npm cache clear --force` (14认同)
  • 感谢这个,那么npm-cache呢,我也应该删除吗? (5认同)
  • 我正在重新安装所有软件包,再次运行“npm install”时遇到 EINTEGRITY 错误。我还必须删除我的“package-lock.json”文件。 (3认同)
  • 如果它在那里,请不要删除npm文件夹 (2认同)

Leo*_*tny 175

我试过凯斯特纳德的解决方案,但对我来说似乎并不完美.awk在deps树本身的最后一个之后留下了很多特殊符号.

所以,我想出了自己对Kai Sternad解决方案的修改(从羊绒的想法中得到一点帮助):

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

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
...
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 此命令适用于OSX,不会删除npm`npm ls -gp --depth = 0 | awk -F/node_modules /'{print $ 2}'| grep -vE'^(npm)$'| xargs npm -g rm` (11认同)
  • 仅供参考,这个也删除了npm (3认同)
  • @EvanCarroll Nope,没有这样的文件,但是`npm`将其所有全局模块安装到同一目录中.确切的位置可能会有所不同,但通常是`/ usr/local/lib/node_modules`. (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` (2认同)

cas*_*ere 60

sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}'  | sudo xargs npm remove -g
Run Code Online (Sandbox Code Playgroud)

为我工作

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

  • 会添加`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` (4认同)

Ked*_*dya 23

对于那些使用Powershell的人:

npm -gp ls --depth=0 | ForEach-Object { Get-Item $_ } | Where { $_.Name -ne 'npm' } | ForEach-Object { npm rm -g $_.Name }
Run Code Online (Sandbox Code Playgroud)

要清除缓存:

npm cache clear
Run Code Online (Sandbox Code Playgroud)


jed*_*mao 22

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

for package in `ls node_modules`; do npm uninstall $package; done;
Run Code Online (Sandbox Code Playgroud)

编辑:此命令打破npm 3.3.6(节点5.0).我现在使用以下Bash命令,我已将其映射到我的.bashrc文件中的npm_uninstall_all:

npm uninstall `ls -1 node_modules | tr '/\n' ' '`
Run Code Online (Sandbox Code Playgroud)

加奖金?它的速度更快!

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

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


Bil*_*ill 14

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


pra*_*aka 13

在Windows中使用"C:\ Users\username\AppData\Roaming"路径并手动删除npm文件夹

  • 这对我们在 Windows 上来说很简单/很有用。谢谢。 (2认同)

eus*_*h77 7

如果你安装了jq,你甚至可以不用grep/awk/sed:

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

在Debian和派生的你可以安装jq:

sudo apt-get install jq
Run Code Online (Sandbox Code Playgroud)


bvj*_*bvj 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%
Run Code Online (Sandbox Code Playgroud)