javascript 如何在大型react项目中找到死代码?

vs3odd8k  于 2023-01-29  发布在  Java
关注(0)|答案(8)|浏览(182)

为了重构客户端项目,我正在寻找一种安全的方法来查找(并删除)未使用的代码。
在大型react项目中,您使用什么工具来查找未使用/死代码?我们的产品已经开发了几年,手动检测不再使用的代码变得非常困难。然而,我们会尽可能删除未使用的代码。
还希望提出一般战略/技术(而不是具体工具)的建议。
谢谢

ocebsuys

ocebsuys1#

Webpack的解决方案:UnusedWebpackPlugin

我在一个大型前端React项目(1100+ js文件)中工作,偶然发现了同样的问题:如何找出哪些文件不再使用?
到目前为止,我已经测试了接下来的工具:

它们都没有真正起作用。原因之一是我们使用了“非标准”导入。除了import中的常规相对路径之外,我们还使用了webpack resolve特性 * 解析 * 的路径,这基本上允许我们使用整洁的import 'pages/something'而不是繁琐的import '../../../pages/something'

未使用的Web包插件

感谢Liam O 'Boyle(elyobo)@GitHub,我终于找到了这个解决方案:https://github.com/MatthieuLemoine/unused-webpack-plugin
这是一个网络包插件,所以它的工作只有当您的捆绑是网络包。
我个人觉得它很好,你不需要单独运行它,而是它内置到您的建设过程中抛出警告时,有什么不好。
我们的研究课题:https://github.com/spencermountain/unrequired/issues/6

vwoqyblh

vwoqyblh2#

unrequired和deadcode等库只支持遗留代码。为了找到未使用的资产,可以使用deadfile手动删除
存储库:https://m-izadmehr.github.io/deadfile/

  • 开箱即用支持ES 5、ES6、React、Vue、ESM、CommonJ。
  • 支持import/require甚至动态导入。

它可以简单地在任何JS项目中查找未使用的文件。
无需任何配置,它支持ES6、React、JSX和Vue文件:

aemubtdh

aemubtdh3#

首先,非常好的问题,在大型项目中,程序员通常会尝试许多行代码测试,并且在结果结束时,很难找到未使用的代码。
有两种可能,必须为您工作-我通常这样做,每当我需要删除和减少未使用的代码到我的项目。

第一路WebStorm集成开发环境:

如果您正在使用web-storm IDE进行JS开发或React JS / React Native或Vue js等,它会用不同颜色或红色警告告诉我们,并指出我们在编辑器中未使用的代码
但在您的特定场景中不起作用,还有另一种方法可以删除未使用的代码。

第二路不需要的库:(不支持JSX)

第二种方法是删除项目中未使用的代码,即不需要的库,您可以在此处访问:unrequired github
NPM和github here下的另一个名为depcheck的库
只要按照他们适当的方法-如何使用他们,你会很容易地修复这个未使用的问题
希望这对你有帮助

jmp7cifd

jmp7cifd4#

我认为对于一个create-react-app引导应用程序来说最简单的解决方案是使用ESLint。尝试使用各种webpack插件,但是每个插件都遇到了内存不足的问题。

使用no-unused-modules,它现在是eslint-plugin-import的一部分。

设置eslint并安装eslint-plugin-import后,将以下内容添加到规则中:

"rules: {
  ...otherRules,
  "import/no-unused-modules": [1, {"unusedExports": true}]
}
f1tvaqid

f1tvaqid5#

我的方法是大量使用ESlint,并在每次推送之前使其在IDE和AD上运行。
它指出了未使用的变量、方法、导入等等。Webpack(它有很好的插件来检测死代码)注意避免捆绑未导入的代码。

fdbelqdn

fdbelqdn6#

发现死亡

使用findead,您可以找到项目中所有未使用的组件。只需安装并运行:

安装

npm i -g findead

用法

findead /path/to/search

j8ag8udp

j8ag8udp7#

这个问题让我想起,当您运行build命令时,react默认会从src中删除deadcode

**注意:**仅当您希望将应用交付生产时,才需要运行构建命令。

cld4siwp

cld4siwp8#

溶液:

对于节点项目,请在项目根目录中运行以下命令:

npx unimported

如果您使用的是流类型注解,则需要添加--flow标志:

npx unimported --flow

源文档(& D):https://github.com/smeijer/unimported
结局:

背景

就像其他答案一样,我尝试了很多不同的库,但从未真正成功。
我需要找到整个没有被使用的文件,而不仅仅是函数或变量。为此,我已经有了我的linter。
我试过deadfileunrequiredtrucker,但都没有成功。
找了一年多,只剩下一件事要做,那就是自己写点东西。
unimported从您的入口点开始,并遵循所有import/require语句。将报告源文件夹中存在的所有未导入的代码文件。
注意,目前它只扫描源文件。不扫描图像或其他资产。因为那些通常是以其他方式"导入"的(通过标签或通过css)。
同样,它也会有假阳性。有时候我们写脚本是为了简化我们的开发过程,比如构建步骤。2这些脚本并不是直接导入的。
另外,有时我们安装了对等依赖项,但我们的代码并不直接导入这些依赖项。这些依赖项会被报告。
但是对我来说,unimported已经非常有用了,我已经从我的项目中删除了很多文件,所以它绝对值得一试。
如果你有任何问题,请让我知道。trough github问题,或在twitter上联系我:https://twitter.com/meijer_s

相关问题