我有多个npm项目保存在本地目录。现在我想在没有node_modules文件夹的情况下备份我的项目,因为它占用了很多空间,也可以在任何时候使用npm install进行检索。

那么,使用命令行接口从指定路径递归删除所有node_modules文件夹的解决方案是什么呢?


当前回答

试一试 https://github.com/voidcosmos/npkill

npx npkill

它将找到所有的node_module,并允许您有选择地删除它们。

其他回答

试一试 https://github.com/voidcosmos/npkill

npx npkill

它将找到所有的node_module,并允许您有选择地删除它们。

注:这只是对已接受答案的改进,请先使用已接受答案。

如果你觉得无聊,那就继续读下去。

基本上,这个命令在99%的情况下都可以正常工作

找到。-name 'node_modules' -type d -prune -exec rm -rf '{}' +

我注意到通过命令行删除文件比通过Finder删除文件夹要长(当从Finder删除时,它会将文件夹移动到~/。垃圾目录)。

所以如果你想把node_modules移动到~/。垃圾箱,然后你可以尝试

找到。- name ' node_modules类型d修剪- sh - c的mv - f“$ 1”“(dirname " $ 1 ") /美元(basename $(目录名" $ 1 "))_美元(basename“$ 1”)”& & mv“$(目录名" $ 1 ")/ $ (basename $(目录名" $ 1 "))_美元(basename“$ 1”)”~ /。垃圾/' sh {} \;

如你所见,它由两部分组成。

找到。-name 'node_modules' -type d -prune查找所有node_module的dirs - sh - c的mv - f“$ 1”“(dirname " $ 1 ") /美元(basename $(目录名" $ 1 "))_美元(basename“$ 1”)”& & mv“$(目录名" $ 1 ")/ $ (basename $(目录名" $ 1 "))_美元(basename“$ 1”)”~ /。垃圾/' sh {} \;重命名node_module,加上它的父文件夹名前缀,并将其移动到Trash

在我

~/Development/angular-projects
 ┣ project1
 ┣ project2
 ┗ project3

运行命令后

~/.Trash
 ┣ ~project1_node_modules
 ┣ ~project2_node_modules
 ┗ ~project3_node_modules

然后确保清空垃圾

或打开空垃圾功能

在Windows上,我使用下面的.BAT文件从当前文件夹中递归地删除node_modules:

@for /d /r . %d in (node_modules) do @if exist %d (echo %d && rd %d /s /q) 

或者,通过CMD.EXE:

>cmd.exe /c "@for /d /r . %d in (node_modules) do @if exist %d (echo "%d" && rd "%d" /s /q)""

改进已被接受的答案:

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

我发现上面的命令会运行很长时间来获取所有文件夹,然后运行删除命令。要使命令可恢复,我建议使用\;。要查看正在运行的命令的进度,使用-print查看正在删除的目录。

注意:必须先cd到根目录下才能执行该命令。或者使用find {project_directory}代替find .。

逐个删除文件夹。

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' \;

逐个删除文件夹,并打印删除的文件夹。

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

对于喜欢交互方式的人,请参考jeckep的答案。在你想要修剪的目录下运行:

npx npkill

打印出要删除的目录列表:

find . -name 'node_modules' -type d -prune

删除当前工作目录下的目录:

find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

或者你也可以使用trash (brew install trash)进行分阶段删除:

find . -name node_modules -type d -prune -exec trash {} +