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

前言

第一次运行 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 来修复的,就是文件保存修改后自动修复,但是官网上看到:


use webpack to fix code

我就打消念头了~

经过我百般折腾和搜索,发现了这个 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)上,如下图所示:

panel

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

总结

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

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • ESLint 配置 ESlint 被设计为完全可配置的,这意味着你可以关闭每一个规则而只运行基本语法验证,或混合和...
    静默虚空阅读 41,236评论 3 14
  • Sublime Text:一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插...
    xiaotao123阅读 9,474评论 0 27
  • Sublime Text:一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插...
    追風逸少丶阅读 11,310评论 1 34
  • 转载 :OpenDiggawesome-github-vue 是由OpenDigg整理并维护的Vue相关开源项目库...
    果汁密码阅读 23,083评论 8 124
  • EsLint入门学习整理 这两天因为公司要求,就对ESLint进行了初步的了解,网上的内容基本上都差不多,但是内容...
    点柈阅读 26,007评论 3 42