Sublime Text 中配置 Eslint 代码检查和自动修复

AI觉醒者
• 阅读 13950

前言

第一次运行 Vue 项目时被浏览器中满屏的 ESLint 报错给吓到了,果断禁用了该功能!

再之后找了个时间认真的了解了一下 ESLint,终于有了一些概念。简单来说,ESLint 就是一个整合了编码规范和检测功能的工具。以前说的那些规范(html,css,js 等规范)都是让你自己主动去学习,去遵守,现在 ESLint 帮助你检测你的代码是否符合你自己设定好的规范。

官网上的说明:

ESLint 最初是由 Nicholas C. Zakas 于2013年6月创建的开源项目。它的目标是提供一个插件化的 javascript 代码检测工具。

关于 ESLint 的入门学习大家可以查看这篇文章:利用ESLint检查代码质量,写得挺易懂的~

ESLint 使用

使用 ESLint 的方式有很多种,参考该 页面,有编辑器,构建工具,命令行,源代码管理等。我个人目前的阶段适合直接使用编辑器来实时检测代码并提示错误,如果使用 webpack 的话,需要保存修改后才会提示,还有其他种种不便(可能是因为我笨吧)。

ESLint 安装和配置

一个项目中想要使用 ESLint,首先需要安装 ESLint。全局安装的话就不用每个项目独立安装了:

npm install eslint -g

如果你首次使用 ESLint,那么你需要先设置一个配置文件,你可以在项目根目录下使用 --init 选项来生成:

eslint --init

But, 如果你真的是初次使用的话,肯定对 ESLint 的一切配置都一头雾水,这里有一份某大牛使用的 ESLint 配置:.eslintrc.js,原项目的该文件将注释删去了,我给的是我之前将项目 fork 过来的文件地址,有注释,如果看不懂注释,就直接 中文官网 上查。

Ok,有了 全局的 ESLint当前项目根目录下的规则配置文件,我们开始装插件并测试功能吧!

代码检查

这个功能需要的插件为 Sublime​LinterSublimeLinter-contrib-eslint

Sublime​Linter 是一个代码检查框架插件,功能非常强大,支持各种语言的检查。但是它本身并没有代码检查的功能,需要借助 ESLint 这样的特定语言检查支持。我们只需要使用对应的 Sublime​Linter-contrib-eslint 插件即可。(参考文章:Sublime Text 3 配置 ESLint 代码检查

装完这两个插件后,就可以右键 SublimeLinter > Lint this view 检查当前打开的 JS 文件了,不过我设置了(右键) SublimeLinter > Lint Mode > Background,让插件在后台自动执行代码检查功能,因此当前项目所有打开的 JS 文件都冒出了各种红框框、红点点……把光标置于错误处会在编辑器底部看到相应的错误信息。

那如何让代码检查在 .vue 文件中也生效呢?在前面给出的 .eslintrc.js 中,有以下这段代码:

// 使用非默认的 babel-eslint 作为代码解析器
// 这样 eslint 就能识别 babel 语法的代码
parser: 'babel-eslint',
// required to lint *.vue files
// 用于检查 *.vue 文件的代码
plugins: [
    'html'
]

需要安装插件才能使其检查 .vue 文件的代码,你需要全局安装 eslint-plugin-html(就是上面代码中的 'html' 插件) 和 babel-eslint(用于识别 babel 语法的代码):

npm install eslint-plugin-html -g
npm install babel-eslint -g

babel-eslint

Why Use babel-eslint?
You only need to use babel-eslint if you are using types (Flow) or experimental features not supported in ESLint itself yet. Otherwise try the default parser (you don't have to use it just because you are using Babel).
乍一看上面的说明,也许我们并不需要 babel-eslint 插件的,但是我也不懂,所以就不管了~

到此暂告一段落,有了代码的实时检查功能,你可以随时修改代码并看到反馈,有些报错代码的写法是你刻意为之的,不影响代码运行,你也可以就放在那里不管它,反正又不影响项目的运行(如果集成到构建工具中使用,说不定就影响了哦~)。

自动修复

ESLint 命令行--fix 选项用来自动修复规则所报告的问题(目前,大部分是对空白的修复),规则名前面有扳手图标的说明该问题可被自动修复。(具体请查看 Rules 页面)

我测试使用了两个 Sublime 插件:ESLintAutoFixESLint-Formatter

第一个插件 ESLintAutoFix 我用了之后,总是会报错 [WinError 2] 系统找不到指定的文件,修改了配置项也没反应,多次尝试后我放弃了。

第二个插件 ESLint-Formatterjs 文件上使用是 ok 的,右键 ESLint Formatter > Format This File 或者直接使用快捷键 ctrl+shift+h。如果快捷键冲突了,可以在菜单栏找到 Preferences > Package Settings > ESLint Formatter > Key Binding - User,打开 Key Binding - User 文件,新增快捷键绑定,代码如下:

{
    "keys": ["ctrl+alt+h"],
    "command": "format_eslint"
}

vue 文件自动修复

但是,如果在 .vue 文件上使用 ESLint-Formatter 插件,就会出现问题,页面上会出现重复的 template 部分(反正我使用的话会有问题,都查不到解决方案……)。

由于我最近主要使用 Vue 进行开发,因此这个问题必须解决(当你发现页面上的红点点超过你的承受能力范围的时候,是非常需要一键自动修复功能的~)!

考虑过使用 webpack 来修复的,就是文件保存修改后自动修复,但是官网上看到:

Sublime Text 中配置 Eslint 代码检查和自动修复
我就打消念头了~

经过我百般折腾和搜索,发现了这个 Fix the code using --fix,并得到了一个解决方案:
菜单栏找到 Tools > Build System > New Build System,新建一个 eslint-fix.sublime-build 文件,文件名随便起都可以的,然后里面内容如下:

{
    "shell_cmd": "eslint --fix $file" 
}

或者

{
    "cmd": "D:\\dev\\nvm\\npm\\eslint.cmd --fix $file" 
}

(确保全局安装 eslint)如果你想要修复的文件可以通过命令行工具运行命令 eslint --fix 成功自动修复的话,我这个方法就能成功。

使用方式为:选择菜单栏 Tools > Build System > eslint-fix 或者 使用快捷键 ctrl+b 运行刚刚创建的 build 文件。(当然选择快捷键方式~)运行成功会将信息显示在面板(Panel)上,如下图所示:

Sublime Text 中配置 Eslint 代码检查和自动修复

如果你有过这种疑问:通过一个快捷键对编辑器当前打开文件执行一句命令,如何实现?答案就是,按照上面的例子就可以实现!

总结

在编辑器里实时检查代码可以给你最直接的代码编写反馈,看到哪里标红了就会想说犯了什么错误,错误改正多了编码习惯也就会慢慢变好了(同时也能避免你犯一些很傻逼的错误)~
反正代码检查工具还是很实用的,可以的话就从今天开始用起来吧!

参考资料

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
3年前
Vue 项目中 ESlint 配置
前言对于ESlint这一块一直存在一些疑问,今天看到一个文章内容挺好的,这里拿来了。一、eslint安装1、全局安装npmigeslint全局安装的好处是,在任何项目我们都可以使用eslint的全局命令进行代码规则操作,但是这对我们的意义并不大,后续会详细介绍;全局安装之后
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
AI觉醒者
AI觉醒者
Lv1
功盖三分国,名成八阵图。
文章
4
粉丝
0
获赞
0