找到死掉的 JavaScript 代码?

我们正在重构一个遗留的 web 应用程序,结果是“杀死”了相当多的 JavaScript 代码,但是由于不确定,我们害怕删除我们认为是死代码的代码。是否有任何工具/技术可以正面识别 JavaScript 中的死代码?

35265 次浏览

这是 Grep。使用它来查找函数调用。假设您有一个名为 dostuff()的方法。在项目的根目录上使用 grep -r "dostuff()" * --color。除非你找到定义以外的东西,你可以安全地删除它。

Ack 也是 Grep的一个显著替代品。

您可以使用代码优化器作为 Google 闭包编译器,但是它通常用于最小化代码。

function hello(name) {
alert('Hello, ' + name);
}


function test(){
alert('hi');
}


hello('New user');

会导致

alert("Hello, New user");

比如说。

另一件你可以做的事情是使用 Chrome 的开发工具(或 Firebug)来查看所有的函数调用。在 档案下,您可以看到哪些函数正在被调用,哪些函数没有被调用。

DT Profiles

没有寻找任何太复杂的东西:

来自 JetBrains 的 WebStorm IDE 可以突出显示项目中的死代码和未使用的变量。

Chrome 提供了一个新功能,可以让开发者看到 代码覆盖率,也就是执行了哪些代码行。

这当然不是一个一站式的解决方案,但是可以帮助开发人员获得代码见解。

查看此 链接了解详细信息

滚动作为 铬59释放的一部分

tools

如果你想自动化这个过程,我会看看 https://github.com/joelgriffith/navalia,它公开了一个自动化的 API 来完成这个过程:

const { Chrome } = require('navalia');
const chrome = new Chrome();


chrome.goto('http://joelgriffith.net/', { coverage: true })
.then(() => chrome.coverage('http://joelgriffith.net/main.bundle.js'))
.then((stats) => console.log(stats)) // Prints { total: 45913, unused: 5572,
percentUnused: 0.12135996340905626 }
.then(() => chrome.done());

详情请浏览: https://joelgriffith.github.io/navalia/Chrome/coverage/

你可以使用 死档案库: Https://m-izadmehr.github.io/deadfile/

它可以在任何 JS 项目中找到未使用的文件。

没有任何配置,它支持 ES6、 JSX 和 Vue 文件: enter image description here

我讨厌这个问题,而且没有解决这个问题的好工具,尽管这个 javascript 生态系统需要大量的解析。正如在另一个答案中提到的,deadfile 非常简洁,但是我不能使它适用于我的代码库,它使用从 src目录的绝对导入。下面的 bash 足够好,可以了解是否有任何文件没有导入到任何地方(我找到了一些!)这是很容易手工验证的。

for f in $(find src -name '*.js' | grep -E 'src/(app|modules|components).*\.js$' | grep -v '.test.js'); do
f=${f/src\//};
f=${f/\/index.js/};
f=${f/.js/};


echo "$f imported in"$(grep -rl "$f" src | wc -l)" files"
done

我不关心测试/资源,因此应用程序 | 模块 | 组件位。字符串替换也可以被显著地清除,但是希望这对某些人来说是有用的。