【转】前端代码规范(静态检查)工具

本文仅供本人学习使用,文章来源:https://blog.csdn.net/wangshu696/article/details/80983538,侵删。

为了统一团队的代码规范,除了一纸规范说明之外,还需要引入工具进行限制。虽说工具并不能完全实现规范中的规则,但至少能够在一定程度上缓解代码不统一的局面。

相对于后端,前端代码规范的质量检查涉及到HTML, CSS,Javascript ,如今还涉及到SCSS,ES5,JSX,  React,Vue,Angular等,更是复杂。

本文提供了在检查工具方面的规则制定,在编辑器IDE中进行配置,在webpack中进行打包。让开发小伙伴有所参考

相关规则可以在webpack4项目demo中看到,里头放了相关的规则链接注释,欢迎围观~


1. 工具选取

笔者对常见的代码检查工具做了一番调研,结合规则支持度,配置方式,在编辑器Sublime于Webstrom这只IDE上的支持度,在webpack打包的支持,最终确立了使用如下方案

HTML / tpl:HTMLHint

CSS / SCSS:StyleLint

JS / JSX:ESLint


对比参考:JavaScript 代码静态质量检查CSS 代码静态质量检查HTML代码风格检查工具对比


尽管如此,这三个插件也并不完美,有太多太多的坑踩遍了,如果你有更合适的套件,欢迎建议~


2. 规则制定

选取了工具之后,就需要确立相应的规则。

规则非常多,对我们这种没经验的小白是不可能一条一条自主去选取的,所以需要依据某些参考。但也只能是参考,我们需要把这些通用的设置,结合到我们实际项目中,并一条条去了解规则,最终选出并摘录进我们的规则集中。

ESLint规则

ESLint规则最多,参考自eslint-config-alloy,再加入我们的自定义



StyleLint规则

ESLint规则也很多,以stylelint-config-standard为基础,加入自定义



HtmlHint规则

HtmlHint的规则比较少,可以直接自定义

要注意的是它并不支持JS语法,需要使用JSON格式(在webpack中会强制按这个语法parse)


对于页面中嵌入的CSS与JS,也需要进行检查。

在ESlint中提供了eslint-plugin-html插件,然而对<style> 与 <script> 造成的缩进处理不当(配置失效的样子),这个是比较难搞的 与 造成的缩进处理不当(配置失效的样子),这个是比较难搞的


在StyleLint中提供了stylelint-processor-arbitrary-tags插件,不过新版似乎内置了支持。然而也并算完美,至少能用就行

在Sublime,Webstorm或其他编辑器IDE中使用这些工具的前提:

安装NodeJS,然后使用NPM在全局安装以下依赖包

npm i -g eslint babel-eslint eslint-config-alloy eslint-plugin-html eslint-plugin-react stylelint stylelint-config-standard htmlhint

在项目根目录下添加三个工具对应的文件 (这三个文件即为对应的检查规则集),以便代码编辑器在任何地方都能找到配置文件,如

ESLint 和 StyleLint 工具提供了自动修复功能,可以修复简单的错误如少了分号,多了空格,缩进不正确等

但要注意的是,自动修复某些时候可能会使代码发生逻辑或语法错误,需谨慎使用(自动修复后一定一定一定记得比对代码,确保无误)


3. 在Sublime中的配置

sublime安装对应的linter工具,以SublimeLinter工具为基础进行配置

Ctrl+Shift+P 调出安装插件层,输入关键字 sublimelinter 进行搜索安装

再安装相应的工具插件,SublimeLinter-eslint,SublimeLinter-stylelint,SublimeLinter-contrib-htmlhint

安装ESLint-Formatter以支持自动修复检查的错误

新增一个构建任务,可命名为,StyleLint-Fix.sublime-build 以支持自动修复检查的错误

在其中填入以下内容,保存在相应的位置即可

{

    "shell_cmd": "stylelint $folder/node_modules/.bin/eslint --fix $file"}

接下来就是配置 SublimeLinter

打开插件配置,在User部分填入以下内容并保存即可

stylelint配置中的executable全局路径需要设置好


可以看到,在sublimelinter的配置中是以手动(manual)模式进行调用检查的,可以防止某些文件代码量太大,频繁检查消耗性能

需要检查的时候,在当前文件打开命令即可,或者使用对应快捷键(如果看不到命令,就采用重启大法吧)

以下命令关键字都是在以 Ctrl+Shift+P打开命令层的前提下进行的

Lint This View ,执行检查

SublimeLinter还支持检查HTML或tpl文件里嵌入的JS和CSS, 但Webstorm不行唷~~

Show All Errors,在底部显示错误列表

使用 ESlint-formatter进行自动修复JS

使用 StyleLint-Fix 进行自动修复CSS

这个需要调出构建任务列表层,或者使用快捷键 Ctrl+Shift+B,选择我们的fix任务执行即可

HTMLHint的不提供自动修复功能


 4. 在WebStorm中的配置

打开设置

启用内置的ESLint检查

启用内置的StyleLint检查

本地安装HTMLHint插件下载地址,注意 此插件仅可支持检查HTML后缀文件,不支持tpl,有兴趣的可以给作者提PR

安装之后,可能需要重启,在列表中可以看到插件配置入口

因此插件比较特殊,在windows下,bin中请使用 node执行程序的绝对路径 全局 htmlhint的绝对路径

其他环境下就慢慢试吧..


bin:  D:\Program Files\nodejs\node.exe C:\Users\e470\AppData\Roaming\npm\node_modules\htmlhint\bin\htmlhint

path: .htmlhintrc


 内置的ESLint与StyleLint不支持自动修复功能,所以我们需要手动创建 File Watcher

配置成手动执行可能会更好些

需要执行的时候,执行即可


5. 在webpack中的配置

参考我的webpack项目配置DEMO, 在 webpack.config.js中传入相应的参数

正式使用时autoFix会按需设置,建议修复。如果选择修复,webpack将按模块的设置进行批量修复,可能会有大量文件被修改,所以需要做好代码比对工作

另外,开启自动修复可能会导致webpack编译无限循环的问题,对于这个我们可以引入一个新的插件time-fix-plugin,直接调用即可

newTimeFixPlugin()


在使用 htmlhint-loader的时候,webpack默认无法识别html资源,在以往我们可以直接使用 htmlWebpackPlugin来识别,因为它内置支持了ejs-loader

但现在这个代码检查插入之后,我们就需要手动设置好html语法的loader。

不能使用html-loader,使用之后会导致无法识别我们的ejs语法,导致htmlWebpackPlugin的资源插入失效

解决办法也很简单,使用 ejs-loader即可,见下方配置


另外,在生产模式 npm run build:prod的时候,提供了将检查结果输出到文件的功能(css的不支持),见 lint目录

虽然有点错乱,也够搜索存档用了

而具体在webpack的核心配置文件里面,配置也是挺简单的,虽然也有蛮多不如意

首先相关的npm包需要安装好,使用htmlhint-loader eslint-loaderstylelint-webpack-plugin

配置核心部分


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

推荐阅读更多精彩内容