是否有一种方法可以简单地卸载Node.js项目中所有未使用(未声明)的依赖项(在我的package.json中不再定义的依赖项)。当我更新我的应用程序时,我喜欢自动删除未引用的包。
当前回答
如果你不担心几分钟的时间来这样做,一个解决方案是rm -rf node_modules和npm install重新构建本地模块。
其他回答
注意:如果启用了包锁,最近的npm版本在运行npm install时自动执行此操作,所以这是不必要的,除非删除带有——production标志的开发包。
运行npm prune删除package.json中没有列出的模块。
从npm帮助修剪:
该命令删除“无关的”包。如果提供了包名,则只删除与所提供名称之一匹配的包。 无关包是不在父包的依赖项列表中列出的包。 如果指定了——production标志,该命令将删除在devDependencies中指定的包。
如果你不担心几分钟的时间来这样做,一个解决方案是rm -rf node_modules和npm install重新构建本地模块。
你可以运行npx depcheck来获取项目中未使用的依赖项和devDependencies的列表。
然后你可以运行npm uninstall pkg1 pkg2等等来删除依赖。
或者也可以从包中删除依赖项。删除node_modules和package-lock.json后重新安装
您可以使用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包满足它们的依赖关系。
重复数据删除算法遍历树,在树中尽可能向上移动每个依赖项,即使没有发现重复项。这将导致一个扁平的和重复数据删除的树。
推荐文章
- npm start和npm run start的区别
- 有没有办法修复包锁。json lockfileVersion所以npm使用特定的格式?
- 如何使用npm全局安装一个模块?
- 实时http流到HTML5视频客户端的最佳方法
- 使用node.js下载图像
- Node.js Express中的HTTP GET请求
- Node.js:将文本文件读入数组。(每一行都是数组中的一项。)
- npm犯错!错误:EPERM:操作不允许,重命名
- Node Sass还不支持当前环境:Linux 64位,带false
- 我如何添加环境变量启动。VSCode中的json
- 解析错误:无法读取文件“…/tsconfig.json”.eslint
- 编译typescript时'tsc命令未找到'
- 在Node.js中'use strict'语句是如何解释的?
- 当WebSockets可用时,为什么要使用AJAX ?
- 使用过程。TypeScript中的env