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

问题描述 投票:364回答:3

有没有办法简单地从Node.js项目中卸载所有未使用的(未声明的)依赖项(不再在我的package.json中定义。)当我更新我的应用程序时,我希望自动删除未引用的包。

node.js npm uninstall
3个回答
623
投票

运行npm prune以取消未在package.json中列出的模块。

来自npm help prune

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

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

如果指定了--production标志,则此命令将删除devDependencies中指定的软件包。


269
投票

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


7
投票

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

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

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

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

如果指定了--production标志或将NODE_ENV环境变量设置为production,则此命令将删除devDependencies中指定的包。设置--no-production将否定NODE_ENV被设置为生产。

如果使用--dry-run标志,则实际上不会进行任何更改。

如果使用了--json标志,那么修改后的npm修剪(或者将使用--dry-run进行的修改)将作为JSON对象打印。

在启用了包锁的正常操作中,在安装模块时会自动修剪无关模块,并且您只需要使用带有--production标志的命令。

如果你已经禁用了包锁,那么无法删除无关的模块,你可以不时地运行npm prune来删除它们。

使用npm-dedupe减少重复

npm dedupe
npm ddp

搜索本地包树并尝试通过将依赖关系进一步向上移动到树中来尝试简化整体结构,从而可以更有效地共享多个依赖包。

例如,考虑这个依赖图:

a
+-- b <-- depends on [email protected]
|    `-- [email protected]
`-- d <-- depends on c@~1.0.9
     `-- [email protected]

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

 a
 +-- b
 +-- d
 `-- [email protected]

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

重复数据删除算法遍历树,尽可能地将每个依赖项移动到树中尽可能远,即使找不到重复项。这将导致平面和重复数据删除树。

© www.soinside.com 2019 - 2024. All rights reserved.