有没有一条命令可以删除所有全局npm模块?如果没有,你有什么建议?
以下命令可删除所有全局 npm 模块。注意:此命令在 Windows 上不起作用。Windows 版本的工作方式请参见Ollie Bennett's Answer。
npm ls -gp --depth=0 | awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}' | xargs npm -g rm
以下是实现的步骤:
npm ls -gp --depth=0
列出所有全局的顶层模块(参见ls命令行文档)awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}'
打印出不实际属于npm本身的所有模块(不以/npm
结尾)xargs npm -g rm
删除来自前一个管道的所有全局模块对于使用Windows的用户来说,最简单的方法是删除以下文件夹中的所有全局安装的npm包:
C:\Users\用户名\AppData\Roaming\npm
你可以通过在资源管理器、运行提示符或开始菜单中输入%appdata%/npm
来快速到达该目录。
npm install
时遇到了EINTEGRITY错误。 我不得不同时删除我的package-lock.json
文件。 - ToastyMallowsC:\Users\[用户名]\AppData\Roaming\nvm\[版本号]\node_modules
。 - Tim Hutchison我尝试了 Kai Sternad 的解决方案,但是我认为它并不完美。在依赖树中最后一个 awk
后面还有很多特殊符号。
因此,我自己修改了 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下运行。
npm
将其所有全局模块安装到同一个目录中。确切位置可能会有所不同,但通常在 /usr/local/lib/node_modules
目录下。 - Leonid Beschastnynpm ls -gp --depth=0 | awk -F/node_modules/ '{print $2}' | grep -vE '^(npm)$' | xargs npm -g rm
。 - real_ate@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 Qsudo 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
在全局范围内移除该软件包npm remove UNMET
只是NOOP。 - kangaxgrep -v npm
:sudo npm list -g --depth=0. | grep -v npm | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g
。该命令的作用是列出全局安装的npm包,并将它们逐一卸载。 - brauliobo对于那些使用Powershell的人:
npm -gp ls --depth=0 | ForEach-Object { Get-Item $_ } | Where { $_.Name -ne 'npm' } | ForEach-Object { npm rm -g $_.Name }
清除缓存:
npm cache clear
只需切换到您的%appdata%/npm
目录并运行以下命令...
for package in `ls node_modules`; do npm uninstall $package; done;
编辑:此命令与npm 3.3.6(Node 5.0)不兼容。我现在使用以下Bash命令,并将其映射到我的.bashrc文件中的npm_uninstall_all:
npm uninstall `ls -1 node_modules | tr '/\n' ' '`
额外的好处?它快了很多!
tr
之前使用了 grep -v npm
和 n
。 - apnerve如果您想要删除所有已安装的包,可以使用 npm -g ls
命令查找它们,然后使用 npm -g rm
命令将其删除。
在Windows操作系统中,前往“C:\Users{用户名}\AppData\Roaming”目录,并手动删除npm文件夹。
json
风格的扎实答案。 - Richard Ayottenpm ls -g --json --depth=0 | jq -r '.dependencies|keys-["npm"]|join("\n")' | xargs sudo npm rm -g
- Roger@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%
awk -F' |@' '/@/ {if ($(NF-1) != "npm") {print $(NF-1)}}'
解释:按空格或@分割,只匹配带有@的行,模块名称将是倒数第二个匹配项 ($(NF-1)
),只有在它不是npm
的情况下才打印。 - Fotios