如何清理package.json中没有的包的node_modules文件夹?


338

假设我安装了项目包,npm install其中包含package.json要安装的模块。一段时间后,我发现不需要某些特定的模块,并从中删除了对它的依赖package.json。然后,我从中删除了一些其他模块,package.json因为不再需要它们,而其他模块则被替换。

现在,我要清理node_modules文件夹,以便只有列在package.json其中的模块可以呆在那里,其余的必须进入,如npm clean。我知道我可以手动将其删除,但希望为此可以使用糖功能。

Answers:


407

我想你在找 npm prune

npm prune [<name> [<name ...]]

此命令删除“外部”软件包。如果提供了软件包名称,则仅删除与提供的名称之一匹配的软件包。

无关软件包是未在父软件包的依赖项列表中列出的软件包。

请参阅文档:https : //docs.npmjs.com/cli/prune


1
据我所知,在新的NPM版本中,所有依赖项都位于根node_modules文件夹中,而不是像以前那样,每个依赖项都有自己的依赖项安装在自己的node_modules文件夹中..具有相同依赖项的无数副本...所以npm prune考虑到这一点吗?因为那些深层的依赖关系不是写在package.json项目的主体上的,所以修剪必须是递归的。
vsync

2
@vsync复制还原用命令实现npm dedupe docs.npmjs.com/cli/dedupe。它试图通过将依赖关系上移树来简化节点树。
knaos

我已经看到NPM修剪无法删除通常在我的公司存储库中出现某些问题时搞砸的事情。然后我必须去rm-rf。如果有一个“把所有东西都炸掉然后一口气将所有东西全部
收回

210

您可以删除node_modules /文件夹,然后从package.json重新安装依赖项。

rm -rf node_modules/
npm install

这将清除当前文件夹中所有已安装的软件包,并且仅安装package.json中的依赖项。如果先前已安装依赖项,则npm将尝试使用缓存的版本,避免再次下载依赖项。


4
是的,我知道我可以使用此方法,但是我很好奇为什么仍然没有更优雅的解决方案。
谢尔盖·巴沙罗夫

除了删除文件夹外,真的没有npm命令删除node_modules吗?
安德斯2014年

4
在Windows平台上,通过资源管理器或命令行删除node_modules时失败(因为某些模块的路径长于256)。应该有npm命令以一种更简洁的方式进行操作。
拉维·库玛

9
rmdir node_modules /s /q在Windows上使用。superuser.com/a/179661/440976
Wedney Yuri

5
我想,这个答案是缺少一个很重要的一点:如果你是在交通限制(即你拥有的每兆字节付费的连接,如移动昂贵的),你有很多的模块,这可能会花费你,而prune选项确实需要您完全连接互联网。
伊万·科尔米切克

102

由于文件夹嵌套,Windows无法删除该文件夹,因为其名称太长。要解决此问题,请安装RimRaf:

npm install rimraf -g

rimraf node_modules

8
或者只是rm -rf node_modules
kappaallday '16

16
rm -rf node_modules在Windows上将无法使用。看到这个解决方案:superuser.com/a/179661/440976
Wédney尤里

1
win7 x64 rimraf通过PowerShell表现出色。.谢谢
gorelative 2016年

通过CMD为Windows 10 64位提供最佳解决方案
Matt Cromwell

rm -rf node_modules在Windows 10上对我不起作用。但是rimraf对我
有用-ssmsnet

24

简单就跑

rm -r node_modules

实际上,您可以使用此方法删除任何文件夹。

rm -r AnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete

只需打开gitbash移动到文件夹的根目录并运行此命令

希望这会有所帮助。


2
不工作,我碰到一个“Permission denied”错误(使用gitbash。
drake035

3
在管理员模式下打开gitbash。我想这会有所帮助。或更改文件夹权限级别设置
Ajay Kotnala

3
这将删除所有软件包。OP明确表示“我想清理node_modules文件夹,以便仅package.json中列出的模块留在此处”。
波阿斯

在这种情况下,我的朋友您可以简单地执行“ npm uninstall package_name”或--save作为sufix,这也会从package.json文件中删除其条目。npm卸载package_name(删除程序包)npm卸载package_name --save(删除程序包并从json包中的依赖项中删除条目)npm卸载package_name --save-dev(删除程序包并从json包中的devdependency中删除条目)
Ajay Kotnala

22

首次在全球范围内安装rimraf

npm install rimraf -g

使用cmd转到您的node_modules文件夹所在的路径,并在以下命令中应用

rimraf node_modules

很好的答案,但是安装软件包以卸载其他软件包不是一个好主意。npm prune是理想的解决方案。
Binayak Gouri Shankar

是的,但是如果您要从项目中删除node_module文件夹,这是最好,最简单的方法。
Ankit Parmar


9

从6.5.0版本开始,npm支持命令clean-install来强制刷新所有软件包


1
这正是我所需要的。当我更新节点时,发生的第一件事是“看起来好像您自从运行'npm install'以来已经更改了环境”。由于我在控制台我已经,这是最简单的只是不干净安装,而不是瞎搞删除文件夹第一等
贾罗德·麦圭尔

3

我在package.json中添加了几行:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

如果只想clean使用,可以使用rimraf node_modulesrm -rf node_modules

工作正常



1

我发现的最好的文章是这篇文章:https : //trilon.io/blog/how-to-delete-all-nodemodules-recursively

全部来自控制台,易于从任何文件夹点执行。

但作为本文的摘要,此命令可以查找node_module在不同项目中找到的每个文件夹的大小。

find . -name "node_modules" -type d -prune -print | xargs du -chs

并实际删除它们:

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

本文还包含Windows Shell的说明。


0

删除/编辑package-lock.json中不需要的程序包(程序包名称将写在依赖关系和devDependencies下),然后

npm install


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.