用于卸载或清理Node.js中未使用的软件包的npm命令

1szpjjfi  于 2022-12-29  发布在  Node.js
关注(0)|答案(4)|浏览(368)

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

amrnrhlw

amrnrhlw1#

:如果启用了package-locks,最新的npm版本会在运行npm install时自动执行此操作,因此除了删除带有--production标志的开发包外,这不是必需的。

运行npm prune以删除未在package.json中列出的模块。
npm help prune开始:
这个命令删除“无关的”软件包。如果提供了一个软件包名,那么只有与提供的名字匹配的软件包才会被删除。
外部程序包是指未在父程序包的依赖项列表中列出的程序包。
如果指定了--production标志,此命令将删除devDependencies中指定的包。

px9o7tmv

px9o7tmv2#

如果您不担心需要几分钟的时间来完成此操作,那么一个解决方案是再次使用rm -rf node_modulesnpm install来重建本地模块。

holgip5t

holgip5t3#

您可以使用npm-prune删除多余的软件包。

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

这个命令删除"无关的"软件包。如果提供了一个软件包名,那么只有与提供的名字匹配的软件包才会被删除。
外部程序包是指未在父程序包的依赖项列表中列出的程序包。
如果指定了**--production标记或将NODE_ENV环境变量设置为production**,则此命令将删除在devDependencies中指定的程序包。设置**--no-production将取消将NODE_ENV设置为production的操作。
如果使用
--dry-run标记,则实际上不会进行任何更改。
如果使用了
--json标记,那么npm prune所做的更改(或者使用--dry-run所做的更改)将作为JSON对象输出。
在启用了package-locks的正常操作中,多余的模块会在安装模块时被自动删除,您只需要这个带有
--production标志的命令。
如果你已经禁用了包锁,那么多余的模块将不会被删除,你可以不时地运行
npm prune**来删除它们。

使用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包来满足它们的依赖关系。
重复数据删除算法遍历树,将每个依赖项在树中尽可能上移,即使未找到重复项也是如此。这将生成一个平面树和已删除重复数据的树。

laik7k3q

laik7k3q4#

您可以运行npx depcheck来获取项目中未使用的依赖项和devDependencies的列表。
然后,您可以运行npm uninstall pkg1 pkg2等等来删除依赖项。
或者,您也可以从package.json中删除依赖项,然后在删除node_modulespackage-lock.json后重新安装软件包

相关问题