为什么 `npm prune` 不会从 node_modules 中删除文件夹?

30

我有一个 package.json 文件,其中包含所有的 devDependencies

我的理解是,如果我删除了某个依赖项,并运行 npm prune 命令,那么 Node.js 将从 node_modules 目录中删除该模块文件夹。这似乎是维护 node_modules 文件夹最简单的方法。

根据文档所述:

npm prune

移除冗余的包

此命令将移除“冗余”的包。

冗余的包是指在父级包的依赖列表中未列出的包。

然而,即使运行了 npm prune 命令,有时我仍然会在我的 node_modules 中看到该模块文件夹。

为什么会发生这种情况,如何正确地删除未使用的模块?


2
执行 npm list 命令。所涉及的文件夹是否为传递依赖项(依赖于其他依赖项)? - Tom Clift
2个回答

22
根据文档,如果指定了--production标志,此命令将删除在devDependencies中指定的软件包。
因此,如果您想要摆脱在devDependencies中指定的node_modules模块文件夹,您应该执行以下命令: npm prune --production

4
我想要移除那些没有在我的devDependencies中指定的文件夹。这与你所建议的不同。我只希望我的node_modules文件夹仅包括我在dependencies中写的内容,而不是之前使用过的额外模块。 - elanh
“are NOT specified in my devDependencies” 的意思是它们在常规依赖项中被指定了,还是根本没有出现在 package.json 中? - Andrei Karpushonak
3
我的意思是它们根本不在package.json中。 - elanh
1
在这种情况下,简单的npm prune就足够了(适用于OSX,npm v1.3.11)- 它会删除package.json中未列出的所有npm_modules目录。 - Andrei Karpushonak
5
是的,这正是我想的。我正在使用npm 1.3.14版本的Windows操作系统。 但即使它们不在package.json中,我仍然有一些node_modules文件夹。 - elanh
2
我遇到了同样的问题。 - PhilT

9

运行完成后:

npm ls

我明白:

npm ERR! extraneous: package@0.9.6 /path/to/package

接着,当我执行以下操作时:

npm prune

软件包已被卸载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接