npm命令卸载或修剪Node.js中未使用的包

是否有一种方法可以简单地从Node.js项目中卸载所有未使用(未声明)的依赖项(在我的package.json中不再定义的依赖项)。当我更新我的应用程序时,我喜欢自动删除未引用的包。

278207 次浏览

如果你不担心几分钟的时间来这样做,一个解决方案是rm -rf node_modulesnpm install再次重建本地模块。

:如果启用包锁,最近的npm版本在运行npm install时自动执行此操作,因此这是不必要的,除非删除带有--production标志的开发包。


运行npm prune删除package.json中未列出的模块。

npm help prune:

这个命令删除“无关的”;包。如果提供了包名,则只删除与所提供名称之一匹配的包。

无关包是不在父包的依赖项列表中列出的包。

如果指定了--production标志,该命令将删除在devDependencies中指定的包。

你可以使用npm-prune来删除无关的包。

npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]

该命令删除“无关的”包。如果提供了包名,则只删除与所提供名称之一匹配的包。

无关包是不在父包的依赖项列表中列出的包。

如果指定了——生产标志或NODE_ENV环境变量设置为生产,此命令将删除在devDependencies中指定的包。设置——生产将使NODE_ENV被设置为生产

如果使用——即将标志,则实际不会进行任何更改。

如果使用了——json标志,则npm修剪所做的更改(或将对——即将所做的更改)将作为JSON对象打印。

在启用包锁的正常操作中,当模块被安装时,多余的模块会被自动修剪,你只需要这个带有——生产标志的命令。

如果你已经禁用了包锁,那么多余的模块将不会被移除,这取决于你时不时地运行npm修剪来移除它们。

使用npm-dedupe减少重复

npm dedupe
npm ddp

搜索本地包树,并试图通过将依赖关系进一步向上移动来简化整体结构,在那里它们可以更有效地由多个依赖包共享。

例如,考虑这个依赖关系图:

a
+-- b <-- depends on c@1.0.x
|    `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
`-- c@1.0.10

在这种情况下,npm-dedupe将树转换为:

 a
+-- b
+-- d
`-- c@1.0.10

由于节点模块查找的分层性质,b和d都将由树的根级的单个c包满足它们的依赖关系。

重复数据删除算法遍历树,在树中尽可能向上移动每个依赖项,即使没有发现重复项。这将导致一个扁平的和重复数据删除的树。