有没有办法简单地从Node.js项目中卸载所有未使用的(未声明的)依赖项(不再在我的package.json
中定义。)当我更新我的应用程序时,我喜欢使用未引用的包自动删除。
答案 0 :(得分:622)
运行npm prune
以取消构建package.json
中未列出的模块。
来自npm help prune
:
此命令删除“无关”包。如果提供了包名,则只删除与提供的名称之一匹配的包。
无关的包是父包依赖列表中未列出的包。
如果指定了
--production
标志,则此命令将删除devDependencies中指定的包。
答案 1 :(得分:265)
如果您不担心几分钟的时间,可以再次rm -rf node_modules
和npm install
重建本地模块。
答案 2 :(得分:7)
npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]
此命令删除“外部”软件包。如果提供了软件包名称,则只会删除与提供的名称之一匹配的软件包。
外部包是未在父包的依赖项列表中列出的包。
如果指定了-production 标志或将 NODE_ENV 环境变量设置为 production ,此命令将删除在您的 devDependencies 。设置-不生产将否定 NODE_ENV 设置为生产。
如果使用-空运行标志,则实际上将不会进行任何更改。
如果使用了-json 标志,则进行了 npm修剪的更改(或使用-dry-run 进行的更改)被打印为JSON对象。
在启用包锁的正常操作中,安装模块时会自动修剪无关的模块,并且只需要带有-production 标志的此命令即可。
如果您禁用了程序包锁,那么多余的模块将不会被删除,您可以不定期运行 npm修剪来删除它们。
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包的满足。
重复数据删除算法遍历了树,即使未找到重复项,也将树中的每个依赖关系尽可能地向上移动。这将导致平面树和重复数据消除树。