是否有一种方法可以简单地卸载Node.js项目中所有未使用(未声明)的依赖项(在我的package.json中不再定义的依赖项)。当我更新我的应用程序时,我喜欢自动删除未引用的包。
注意:如果启用了包锁,最近的npm版本在运行npm install时自动执行此操作,所以这是不必要的,除非删除带有——production标志的开发包。
运行npm prune删除package.json中没有列出的模块。
从npm帮助修剪:
该命令删除“无关的”包。如果提供了包名,则只删除与所提供名称之一匹配的包。 无关包是不在父包的依赖项列表中列出的包。 如果指定了——production标志,该命令将删除在devDependencies中指定的包。
您可以使用npm-prune删除无关的包。
npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]
该命令删除“无关的”包。如果提供了包名,则只删除与所提供名称之一匹配的包。
无关包是不在父包的依赖项列表中列出的包。
如果指定了——production标志或者将NODE_ENV环境变量设置为production,该命令将删除devDependencies中指定的包。设置——no-production将否定将NODE_ENV设置为生产。
如果使用了——dry-run标志,那么实际上不会进行任何更改。
如果使用了——json标志,则npm prune所做的更改(或使用——dry-run所做的更改)将被打印为json对象。
在启用包锁的正常操作中,当模块被安装时,多余的模块会被自动修剪,您只需要这个带有——production标志的命令。
如果你已经禁用了包锁,那么多余的模块将不会被移除,这取决于你时不时地运行npm prune来移除它们。
使用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包满足它们的依赖关系。
重复数据删除算法遍历树,在树中尽可能向上移动每个依赖项,即使没有发现重复项。这将导致一个扁平的和重复数据删除的树。
你可以运行npx depcheck来获取项目中未使用的依赖项和devDependencies的列表。
然后你可以运行npm uninstall pkg1 pkg2等等来删除依赖。
或者也可以从包中删除依赖项。删除node_modules和package-lock.json后重新安装
推荐文章
- MongoDB和Mongoose的区别
- 如何使用Express.js指定HTTP错误码?
- 通过npm安装Twitter Bootstrap的目的?
- 将文件中的字符串替换为nodejs
- 事件循环上下文中微任务和宏任务的区别
- 如何卸载使用npm link安装的包?
- NPM安装时间失败,出现make not found错误
- 显示stdout "live"
- 将Node.js配置为记录到文件而不是控制台
- 中间件和app.use在Expressjs中是什么意思?
- 当使用ES6模块时,Node.js中的__dirname的替代方案
- 在Node.js中读取文件
- DeprecationWarning:当我将脚本移动到另一个服务器时,由于安全性和可用性问题,Buffer()已弃用
- 我如何确定正确的“max-old-space-size”为Node.js?
- npm犯错!代码UNABLE_TO_GET_ISSUER_CERT_LOCALLY