Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有工具可以删除javascript中未使用的方法?_Javascript - Fatal编程技术网

是否有工具可以删除javascript中未使用的方法?

是否有工具可以删除javascript中未使用的方法?,javascript,Javascript,我已经从第三方获得了一组javascript文件,我想删除所有未使用的方法,以将大小降低到一个更合理的水平 有人知道有一种工具可以为Javascript实现这一点吗?至少给出一个未使用/使用过的方法列表,这样我就可以手动修剪了?这将是除了运行YUI Javascript压缩工具之类的工具之外 否则,我的想法是编写一个perl脚本来帮助我完成这项工作。不。因为您可以像这样以疯狂的动态方式“使用”方法 obj[prompt("Gimme a method name.")](); 除非库作者跟踪依赖

我已经从第三方获得了一组javascript文件,我想删除所有未使用的方法,以将大小降低到一个更合理的水平

有人知道有一种工具可以为Javascript实现这一点吗?至少给出一个未使用/使用过的方法列表,这样我就可以手动修剪了?这将是除了运行YUI Javascript压缩工具之类的工具之外

否则,我的想法是编写一个perl脚本来帮助我完成这项工作。

不。因为您可以像这样以疯狂的动态方式“使用”方法

obj[prompt("Gimme a method name.")]();

除非库作者跟踪依赖项,并提供下载最小代码的方法[例如],否则很难识别“未使用”的函数

问题在于JS是一种动态语言,有几种方法可以调用函数

你可能有一种方法,比如

function test() 
{
   //
}
你可以这样称呼它

   test();

   var i = 10;
   var hello = i > 1 ? 'test' : 'xyz';

   window[hello]();
退房。生成代码覆盖率统计信息,显示程序的哪些行已执行(哪些已丢失)

我想删除所有未使用的方法,使大小降低到一个更合理的水平

有两种可用的工具:

npm install -g fixmyjs
fixmyjs <filename or folder>
npm安装-g fixmyjs
fixmyjs
一个可配置的模块,它使用JSHint(,)来标记未使用的函数并执行清理

我不确定它是否会删除
未定义的
函数,而不是标记它们。尽管它是一个很好的清理工具,但它似乎与ECMAScript的更高版本不兼容(更多信息见下文)

还有一种方法声称可以删除死掉的JS,但这更像是一种构建工具

更新

如果您使用的是Babel之类的东西,请考虑在文本编辑器中添加<强> <强>,它可以触发对未使用的方法甚至变量的警告,并具有<代码> -FIX < /Cord> CLI选项,用于自动修复某些错误和样式问题。 我喜欢ESLint,因为它包含多个用于备用lib的插件(如缺少道具时的React警告),允许您提前捕获bug。他们有一个坚实的生态系统


例如:在我的NodeJS项目中,我使用的配置基于。您必须编写一个perl脚本。不要理会上面的反对者

这样的工具可以与设计为只显式进行函数调用的库一起使用。这意味着不允许函数的委托或指针,在任何情况下使用这些委托或指针只会导致无法阅读的“意大利面代码”,这不是最佳实践。即使它删除了其中一些隐藏函数,您也会在测试中发现大部分(如果不是全部的话)。那些你没有发现的东西会很少使用,不值得你花时间去修复。不要过分追求完美。人们那样做会发疯的

因此,将这一限制应用于JavaScript(和库)将大大减少页面大小,从而缩短加载时间,更不用说可读性和可维护性了。对于那些删除未使用的CSS的工具,如grunt_CSS和UNCS(请参阅),这种情况已经存在,并且报告了典型的缩减,缩减到原始大小的十分之一

这是一个双赢的局面

值得注意的是,所有口译员都必须解决如何管理自修改代码的问题。就我的一生而言,我不明白为什么人们要坚持不受限制的自由。正如上面Triptych所指出的,Javascript函数的调用方式简直是“疯狂”。这种疯狂的灵活性破坏了代码和数据分离的基本原则,支持实时代码注入,并使任何维护代码完整性的尝试无效。结果总是无法读取无法调试的代码,而JavaScript的副作用——取消运行自动代码预优化和验证的能力——比任何可能的好处都要糟糕得多

而且——你必须对自己的工作感到非常不安全,才能故意从同事和你自己那里对它进行评论。工作非常好的浏览器客户端采用“少即是多”的方法,我迄今为止看到的最好的例子是Microsoft Office Access Web表单与SharePoint Access服务的组合。拥有一个无处不在、管理严密的运行时解释器客户机及其服务器端克隆的生产率绝对是惊人的

因此,JavaScript自修改代码技术的未来是将它们重新纳入标准,以尊重

代码和数据的接吻原则:保持分离,笨蛋

以下将有助于:

  • 如果您已经完全覆盖了测试用例,那么运行代码覆盖工具(如伊斯坦布尔()或nyc())将给出未触及函数的提示

  • 至少上述内容将有助于找到您可能认为未使用的涵盖函数


  • 我知道这是一个老问题,因为它支持删除未使用的代码,这可能是您正在寻找的

    还值得注意的是,eslint支持一个名为的选项,该选项实际上执行一些基本处理,以检测函数是否正在使用。如果您使函数匿名并将其存储为变量,它肯定会检测到它(但请注意,作为变量,函数声明不会立即被提升)


    在检测未使用函数的上下文中,在极端的情况下,可以考虑将大部分功能分解为单独的模块,因为有包和工具来帮助检测未使用的模块。有一些可能与这一理念相关,但对于您的用例来说,这可能是极端的。

    是的,您所能做的最好的事情就是粗略地通过。我将开始在我的所有项目中使用此方法。但除了示例和其他用户生成/随机生成的方法,你不能缩减文件吗?@jedierikb-不。没有可靠的方法来确定要运行的代码。这个答案让人觉得很好