当前位置: 首页 > news >正文

转 JavaScript 检查(Linting)工具的比较

JavaScript 检查(Linting)工具的比较

小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货。各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握..

一个检查(linting)工具可以帮助我在编写 JavaScript 时避免一些愚蠢的错误。 尽管我有多年的开发经验,但是我仍然会有键入变量名不正确情况,产生语法错误以及忘记正确处理错误。一个好的检查工具或校验器可以在我浪费时间找BUG之前告诉我存在的问题,更糟糕的是可能会浪费用户的时间。一个好的检查(linting)工具可以确保一个项目遵循编码规范。

有很多可用于 JavaScript 的检查器,但是你如何选择使用哪一个呢? 让我们来看看四种流行替代方案的特性和优缺点:JSLint , JSHint , JSCS 和 ESLint 。

概述

四种工具用基本相同的方式工作。他们有一组规则用于分析和报告 JavaScript 文件中的问题。他们可以通过 npm 安装。他们都可以通过命令行使用,作为诸如 Grunt 之类的工具的插件使用,或者被集成到编辑器中。他们都支持使用注释进行配置。

课程内容大纲 | 开篇:一线大公司对中高级前端工程师的要求

  • 1 JavaScript 测试基础
  • 2 JavaScript 难点选讲
  • 3 异步流程控制
  • 4 模块化
  • 5 模板引擎
  • 6 webpack
  • 7 学会性能测试对比
  • 8 基于缓存的前端性能优化
  • ......
点击报名

上面说的都是相似之处。每个工具都有各自的优点和缺点 —— 只是有些工具比其他工具有更多的优点。

JSLint

JSLint 是其中最老的工具。在2002年 Douglas Crockford 开发了该工具,根据其经验,强制使用 JavaScript 语言中精粹部分。如果你同意这些精粹,JSLint 能成为一个好的工具 —— 现在就可以马上安装,直接使用。

JSLint 的缺点是不能配置 或者 扩展。你根本无法禁掉多余的功能,并且很多缺少文档。官方文档不是很友好,例如,它缺少如何将其集成到编辑器的信息。

优点

  • 参数配置完成,可以直接使用(如果您赞同其执行规则的话)

缺点

  • JSLint 没有配置文件,如果想改变参数设置,那就存在问题
  • 有限的配置选项,许多规则不能禁掉
  • 无法添加自定义规则
  • 没有规则文档
  • 很难弄清楚哪个规则引起的错误

JSHint

JSHint 是一个可配置的 JSLint 版本( JSLint 的一个 fork )。 您可以配置每个规则,并将其放入配置文件,这使得 JSHint 更加容易使用于更大的项目。 JSHint 对于每个规则还有很友好的文档,所以可以准确知道每个规则的作用。将其集成到编辑器也是简单的。

JSHint 的一个小缺点是它有一个松散的默认配置。 这意味着在你使用它之前,需要做一些设置。和 ESLint 相比,你想要知道更改哪些规则来启用或禁用某些错误消息是,JSHint 比较困难。

优点

  • 大多是设置可以配置
  • 支持配置文件,在大项目中容易使用
  • 已经支持许多类库,像jQuery、QUnit、NodeJS、Mocha等
  • 支持基本的ES6

缺点

  • 很难知道哪个规则导致错误
  • 有两种类型的选项 :强制选项和松散选项。使得配置有些混乱
  • 不支持自定义规则

JSCS

JSCS 不同于其他,如果你不给它一个配置文件 或 告诉它一个配置项,JSCS 不会做任何事情。你可以从他们的网站下载配置,所以这不是一个大问题,而且它有很多预设,比如 jQuery 编码风格预设和 Google 预设。

它有90多个不同的规则,通过插件可以创建自定义规则。 JSCS 还支持自定义报告器,这使得它可以更容易与需要以特定格式输入的工具集成。

JSCS是一个代码风格检查器。 这意味着它只捕获与代码格式化相关的问题,不会报告潜在的错误或错误。 因此,与其他工具相比缺少灵活性,但如果你需要强制执行一个特定的编码风格,JSCS 可以做得很好。

优点

  • 支持自定义报告,更容易与其他工具集成
  • 如果你遵循一种可用的编码风格,预设和现成的配置文件可以使设置变得容易
  • 在报告中存在标记包含规则名字,所以很容易找出哪个规则导致哪个错误
  • 可以使用自定义插件来扩展

缺点

  • 仅检查编码风格的违例。JSCS 不能检查潜在存在的 bug ,比如未使用的变量,或者偶然的全局变量等等。
  • 四个工具中最慢,但是在使用中不是一个问题

ESLint

ESLint 是这四个中最新出的一个。它被设计成易于扩展,附带大量的自定义规则,并且很容易以插件的形式安装更多规则。它给出了简洁的输出,但是在默认情况下包含了规则名,因此您总是可以知道哪些规则导致了错误消息。

ESLint 文档可能会有一点影响或遗漏。规则列表易于遵循,并被分组到逻辑类别中,但是配置指令在某些地方有些混乱。不过,它确实提供了编辑器集成、插件和示例的链接。

优点

  • 灵活:任何规则都可以开启或关闭,并且有些规则有些额外配置项
  • 很容易扩展,并有许多可用的插件
  • 易于理解的输出
  • 包含了在其他检查器中不可用的规则,使得 ESLint 在错误检查上更有用
  • 支持 ES6 ,唯一支持 JSX 的工具
  • 支持自定义报告

缺点

  • 需要一些配置
  • 速度慢,但不是主要问题

我的推荐

在这4个工具中,我的选择是 ESLint 。JSHint 是严格和不可配置的,而 JSHint 缺少扩展机制。 如果仅仅用于编码风格检查,JSCS 是一个不错的选择,但是 ESLint 不仅可以进行代码风格的检查,而且可以检查代码中的 bug 和其他问题。

如果使用ES6(或 ES2015 ,因为他们似乎正在调用它),ESLint 也是明智的选择。在上面提到的工具中,ESLint 对 ES6 支持的最广泛。

如果你像尝试 ESLint ,我已经创建了一个 5 步快速入门指南。让你入门变得非常容易。 你可以 从我的网站下载ESLint 5步快速入门指南。

JSHint 是第二选择。如果不需要 ESLint 的高级功能,JSHint 会在正确配置后捕获大量问题。JSCS 拥有大量的可用规则,如果你不需要除了编码风格检查(缩进,大括号等)以外的其他检查,它将是一个最好的选择。

我非常犹豫去推荐 JSLint 。其他工具做同样地事情,但是不强制用户遵守这些规则。唯一的例外是你碰巧同意那些强制规则,在这种情况下,那是值得深入研究的。

检验工具是解决问题的好方法,但是它只能发现其规则匹配的许多错误。对于一个更安全的 bug 自动捕获来说,我建议使用单元测试。代码复查也可以用于此目的。

你和你的团队是如何保障代码质量的呢?

原文链接:https://www.sitepoint.com/comparison-javascript-linting-tools/

转载于:https://www.cnblogs.com/rubyxie/articles/7229640.html

相关文章:

  • 前端知识学习——html
  • oracle中length、lengthb、substr、substrb用法小结
  • SAS笔记(5) FLAG和计数器
  • 用于检测移动设备(包括平板电脑)的轻量级PHP类
  • 170511、Spring IOC和AOP 原理彻底搞懂
  • CodeChef Forest Gathering —— 二分
  • ReactiveSwift源码解析(九) SignalProducerProtocol延展中的Start、Lift系列方法的代码实现...
  • 在List中删除符合条件的内容
  • 亿级SQL Server运维的最佳实践PPT分享
  • socket简单理解
  • JAVA最佳实践
  • 关于Hibernate中get和load的区别
  • bootstrap-table 怎么自定义搜索按钮实现点击按钮进行查询
  • 新产品为了效果,做的比較炫,用了非常多的图片和JS,所曾经端的性能是非常大的问题,分篇记录前端性能优化的一些小经验。...
  • 百度地图坐标拾取
  • Debian下无root权限使用Python访问Oracle
  • E-HPC支持多队列管理和自动伸缩
  • es6(二):字符串的扩展
  • ES6核心特性
  • Fastjson的基本使用方法大全
  • mockjs让前端开发独立于后端
  • nodejs调试方法
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Promise面试题,控制异步流程
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • python 学习笔记 - Queue Pipes,进程间通讯
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue-router的history模式发布配置
  • windows下mongoDB的环境配置
  • 大整数乘法-表格法
  • 机器学习 vs. 深度学习
  • 日剧·日综资源集合(建议收藏)
  • 如何利用MongoDB打造TOP榜小程序
  • 入手阿里云新服务器的部署NODE
  • 移动端唤起键盘时取消position:fixed定位
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • # .NET Framework中使用命名管道进行进程间通信
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (js)循环条件满足时终止循环
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)构建dubbo分布式平台-平台功能导图
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)基于IDEA的JAVA基础1
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Linq学习笔记
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET6 命令行启动及发布单个Exe文件