是否有一种方法可以简单地从节点卸载所有未使用(未声明)的依赖项。js项目(我的包.json
中不再定义的项目)当我更新我的应用程序时,我希望自动删除未引用的包。
注意:最近的npm
版本在启用包锁时会自动执行此操作,因此,除了删除带有--make
标志的开发包外,这是不必要的。
运行npm prune
以删除未在package.json
中列出的模块。
从npm help prune
:
此命令删除“无关”包。如果提供了包名称,则仅删除与所提供名称之一匹配的包。
无关包是未列在父包依赖项列表中的包。
如果指定了--production
标志,此命令将删除devdependency中指定的包。
如果您不担心需要几分钟的时间来完成此操作,那么解决方案是重新安装rm-rf node_模块
和npm
,以重建本地模块。
npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]
此命令删除“无关”包。如果提供了包名称,则仅删除与所提供名称之一匹配的包。
无关包是未列在父包依赖项列表中的包。
如果指定了生产标志或者将NODE_ENV环境变量设置为生产,则此命令将删除在devDependence中指定的包。设置--no-生产将否定设置为生产的NODE_ENV。
如果使用--dry-run标志,那么实际上不会进行任何更改。
如果使用--json标志,那么npm prune所做的更改(或者用--dry-run所做的更改)将被打印为JSON对象。
在启用包锁的正常操作中,安装模块时会自动删除无关模块,并且您只需要使用带有--production标志的此命令。
如果您已经禁用了包锁,那么无关的模块将不会被删除,您可以随时运行npm prune来删除它们。
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消重将树转换为:
a
+-- b
+-- d
`-- c@1.0.10
由于节点模块查找的层次性,b和d都将通过树的根级别的单个c包来满足它们的依赖关系。
重复数据消除算法遍历树,将树中的每个依赖项尽可能向上移动,即使没有找到重复项。这将导致生成平坦树和重复数据消除树。