一个好的检查(linting)工具可以确保一个项目遵循编码规范。

让我们来看看四种流行替代方案的特性和优缺点:JSLint , JSHint , JSCS 和 ESLint 。

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/

JavaScript 检查(Linting)工具的比较的更多相关文章

  1. 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  2. JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  3. 加速编码的 JavaScript 库和工具

    JavaScript库是 一个提前写好的JavaScript文件库,它可以很容易的开发基于JavaScript的应用,特别是AJAX和一些其它的以web为中心的技术.运用JavaScript最基本的方 ...

  4. javascript检查移动设备是否支持重力方向感应

    javascript如何检查移动设备,如手机平台是否支持重力或者方向感应. 可以使用html5提供的重力和方向感应接口来判断. html5 中针对高端手机提供了重力感应和重力加速的接口,开发可以利用这 ...

  5. ESLint – 可扩展的 JavaScript & JSX 校验工具

    ESLint 是一个开源的 JavaScript 代码校验工具,最初是由 Nicholas C. Zakas 在2013年创建的.经常被用来发现问题的模式或代码,不符合特定的风格准则. ESLint ...

  6. 一个分门别列介绍JavaScript各种常用工具的脑图

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:一个分门别列介绍JavaScript各种常用工具的脑图.

  7. JavaScript 检查 email 地址的正则表达式

    JavaScript 检查 email 地址的正则表达式​1.代码(1)<html><head><title>Checking an email address - ...

  8. 非常优秀的Javascript(AJAX) 开发工具:Aptana

    非常优秀的Javascript(AJAX) 开发工具:Aptana 下面我要向你介绍一款非常优秀的Javascript(AJAX) 开发工具:Aptana.应为它实在太棒了,所以我忍不住想向你推荐它. ...

  9. Javascript开发之工具归纳

    写在前面 由于JS开发对我来说是全新的技术栈,开发过程中遇到了各种各样的框架.工具,同时也感叹一下相对于.Net的框架(工具框架以及测试框架等)JS框架真的是太丰富了.社区的力量果然强大---也是由此 ...

  10. 基于ArcGIS API for Javascript的地图编辑工具

    最近工作上需要用ArcGIS API for Javascript来开发一个浏览器上使用的地图编辑工具,分享一下一些相关的开发经验. 我开发的地图编辑工具是根据ESRI提供的例子修改而来的,参考的例子 ...

随机推荐

  1. IP分类与子网划分

    1.IP地址的格式  每一类地址都由两个固定长度的字段组成: (1)网络号 net-id:它标志主机(或路由器)所连接到的网络 (2)主机号 host-id:它标志该主机(或路由器).   最大可指派 ...

  2. JS学习笔记 (四) 数组进阶

    1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...

  3. Spring三级缓存解决循环依赖

    前提知识 1.解决循环依赖的核心依据:实例化和初始化步骤是分开执行的 2.实现方式:三级缓存 3.lambda表达式的延迟执行特性 spring源码执行逻辑 核心方法refresh(), popula ...

  4. 「浙江理工大学ACM入队200题系列」问题 J: 零基础学C/C++83——宁宁的奥数路

    本题是浙江理工大学ACM入队200题第八套中的J题 我们先来看一下这题的题面. 题面 题目描述 宁宁参加奥数班,他遇到的第一个问题是这样的:口口口+口口口=口口口,宁宁需要将1~9 九个数分别填进对应 ...

  5. Codeforces Round #786 (Div. 3) 补题记录

    小结: A,B,F 切,C 没写 1ll 对照样例才发现,E,G 对照样例过,D 对照样例+看了其他人代码(主要急于看后面的题,能调出来的但偷懒了. CF1674A Number Transforma ...

  6. 基于 Sealos 的镜像构建能力,快速部署自定义 k8s 集群

    Sealos 是一个快速构建高可用 k8s 集群的命令行工具,该工具部署时会在第一个 k8s master 节点部署 registry 服务(sealos.hub),该域名通过 hosts 解析到第一 ...

  7. MediatRPC - 基于MediatR和Quic通讯实现的RPC框架,比GRPC更简洁更低耦合,开源发布第一版

    大家好,我是失业在家,正在找工作的博主Jerry.作为一个.Net架构师,就要研究编程艺术,例如SOLID原则和各种设计模式.根据这些原则和实践,实现了一个更简洁更低耦合的RPC(Remote Pro ...

  8. Go语言核心36讲18

    你很棒,已经学完了关于Go语言数据类型的全部内容.我相信你不但已经知晓了怎样高效地使用Go语言内建的那些数据类型,还明白了怎样正确地创造自己的数据类型. 对于Go语言的编程知识,你确实已经知道了不少了 ...

  9. selenium被某些网页检测不允许正常访问、登录等,解决办法

    网站通过什么方式检测 function b() { return "$cdc_asdjflasutopfhvcZLmcfl_"in u || d.webdriver } 通过上方的 ...

  10. 关于python3格式化字符输出的问题

    前言 今天简答写了一个爬虫,利用 % 格式化输出总是有问题 第一种写法: url = 'https://yysygw.res.netease.com/pc/gw/20190826151318/data ...