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

时间:2014-01-28 21:15:53

标签: node.js npm uninstall

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

3 个答案:

答案 0 :(得分:622)

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

来自npm help prune

  

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

     

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

     

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

答案 1 :(得分:265)

如果您不担心几分钟的时间,可以再次rm -rf node_modulesnpm install重建本地模块。

答案 2 :(得分:7)

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

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 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包的满足。

重复数据删除算法遍历了树,即使未找到重复项,也将树中的每个依赖关系尽可能地向上移动。这将导致平面树和重复数据消除树。