在React项目中使用Eslint代码检查工具及常见问题


Posted in Javascript onOctober 10, 2018

背景

最近使用 create-react-app 创建了一个项目。但是众所周知的是,这个脚手架创建的项目并没有默认加入 Eslint 等 lint 插件来规范代码。

考虑到项目中很多项目没有使用类似的代码检查工具,为了规范开发。这次有必要记录一下流程。

使用 Eslint 流程

1. 安装 Eslint

首先,先安装 Eslint 到项目本地(全局安装亦可)。

npm --save-dev install eslint

安装完成之后,我们先创建基础的 .eslintrc.yml (建议使用 .yml 格式,json/js 格式也可以):

./node_modules/.bin/eslint --init ## 全局安装,可用 `eslint --init`

输入上述命令之后,会出现询问界面:

? How would you like to configure ESLint? (Use arrow keys)
  Use a popular style guide
❯ Answer questions about your style
  Inspect your JavaScript file(s)

选择“Answer questions about your style”,后面有一些问题,根据实际进行选择。

上述操作完成之后,会帮我们创建一个基础的 .eslintrc.yml 文件。我们也可以使用 touch .eslintrc.yml 自行创建。

2. 安装 babel-eslint

由于项目中需要使用到 ES2015 的语言规范,因此需要安装 babel-eslint :

npm install --save-dev babel-eslint

安装完成之后,我们需要在 .eslintrc.yml 中修改配置

parser: "babel-eslint"

【注意】:若没有该项,曾手动增加

3. 安装 eslint-plugin-react

项目中需要使用 React 框架,需要识别出 React 特定的语法规则和要求,需要安装 eslint-plugin-react :

npm install --save-dev eslint-plugin-react

安装完成之后,我们需要引入该 Eslint 组件。修改 .eslintrc.yml 配置:

plugins:
 - react

特别提醒:YML语法规则中表示数组格式:- 开头,后面为数组元素,如此处的 react。属性值中若不含特殊字符,可以不加上双引号。

4. 安装 Airbnb

到现在为止,我们只使用了一些默认创建的校验规则,为了避免我们自己按照 Eslint 的规则一个一个来个性化定制规则,很是麻烦。这里我们使用 GitHub - airbnb/javascript: JavaScript Style Guide 规范来定义规则。这就需要安装如下插件:

npm i --save-dev eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y

接着,我们修改 .eslintrc.yml 配置,将扩展插件变更为 Airbnb :

extends: "airbnb"

到此,静态代码检查工具安装结束。

检查 Git 提交的代码

除了静态代码检查,我们还设置一道关卡来保证提交的代码符合规范。这就需要使用到我们主角 pre-commit 钩子。
这里假设项目中使用 Git 进行代码的提交操作。

首先在 package.json 中增加如下脚本指令:

{
 "scripts": {
  "lint": "eslint --ext .js --ext .jsx src"
 }
}

这里将检查目录 src 下面所有以 .js或.jsx 格式结尾的代码文件。

然后,安装 pre-commit ,以便检查提交操作:

先执行安装 npm install --save-dev pre-commit,然后在 package.json 中增加下面配置。

{
 "pre-commit": [
  "lint"
 ]
}

这里的 lint 对应第 1 步中增加的脚本命令名。

完成之后,在每次提交代码之前,pre-commit 都会拦截 Git 的 commit 操作,然后运行 lint 命令进行代码检测,若检测到有违反校验规则的情况,则会返回错误,从而导致 git commit 失败。

遇到的问题

1. 代码检查,.js 文件不支持 jsx。

error  JSX not allowed in files with extension '.js'  react/jsx-filename-extension

此时需要增加配置以便支持在 .js 文件中支持使用 JSX 语法。

rules:
 react/jsx-filename-extension: 
  - warn
  - extensions:
   - ".js" # .js 文件适用
   - ".jsx"

2. 代码中 process.env 报错

此处需要支持 node 语法。增加配置:

env:
 node: true

3. 代码检查了 serviceWorker.js 等第三方组件文件

有时项目中存在一些已经编译好的的JS文件,无需进行代码检查,此时需要增加 .eslintignore 文件来告诉 Eslint 忽略一下文件的检查,如:

# node_modules
node_modules/

# build
build/

# dist
dist/

# serviceWorker
src/serviceWorker.js

总结

一句话总结,我们需要Eslint插件实现代码检查,需要 Airbnb 来简化校验规则的编写,需要 pre-commit 来拦截提交操作,最大限度保证仓库中的代码是符合规范要求的。

其他项目(如Vue项目)需要使用到 Eslint 和 pre-commit,如上配置即可,不同支持在于是否配置支持 react。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript的匿名函数小结
Dec 31 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
Mar 24 Javascript
jquery动态增加删除表格行的小例子
Nov 14 Javascript
javascript读取Xml文件做一个二级联动菜单示例
Mar 17 Javascript
基于javascript实现的搜索时自动提示功能
Dec 26 Javascript
JavaScript中document对象使用详解
Jan 06 Javascript
JavaScript类的继承操作实例总结
Dec 20 Javascript
VUE v-model表单数据双向绑定完整示例
Jan 21 Javascript
vue指令做滚动加载和监听等
May 26 Javascript
微信小程序背景音乐开发详解
Dec 12 Javascript
JS数据类型判断的几种常用方法
Jul 07 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
Oct 10 #jQuery
Vue 重置组件到初始状态的方法示例
Oct 10 #Javascript
15个顶级开源JavaScript框架和库
Oct 10 #Javascript
使用Angular 6创建各种动画效果的方法
Oct 10 #Javascript
js 实现在2d平面上画8的方法
Oct 10 #Javascript
从零开始用electron手撸一个截屏工具的示例代码
Oct 10 #Javascript
js正则取值的结果数组调试方法
Oct 10 #Javascript
You might like
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
PHP 反射机制实现动态代理的代码
2008/10/22 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
react-router实现按需加载
2017/05/09 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
2017/11/29 Javascript
纯js封装的ajax功能函数与用法示例
2018/05/14 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
2018/06/19 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python实现图片识别加翻译功能
2019/12/26 Python
Django中使用Celery的方法步骤
2020/12/07 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
酒店公关部经理岗位职责
2013/11/24 职场文书
会计出纳岗位职责
2013/12/25 职场文书
工地安全生产标语
2014/06/06 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
期末考试复习计划
2015/01/19 职场文书
一个都不能少观后感
2015/06/04 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android