在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的求爱小特效
May 09 Javascript
JavaScript中的console.log()函数详细介绍
Dec 29 Javascript
jQuery仅用3行代码实现的显示与隐藏功能完整实例
Oct 08 Javascript
js实现仿qq消息的弹出窗效果
Jan 06 Javascript
js插件dropload上拉下滑加载数据实例解析
Jul 27 Javascript
js实现弹窗居中的简单实例
Oct 09 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
Aug 19 Javascript
微信公众号开发之微信支付代码记录的实现
Oct 16 Javascript
关于vue里页面的缓存详解
Nov 04 Javascript
npm qs模块使用详解
Feb 07 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 Javascript
JS精髓原型链继承及构造函数继承问题纠正
Jun 16 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
main.php
2006/12/09 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
PHP中cookie知识点学习
2018/05/06 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
python中添加模块导入路径的方法
2021/02/03 Python
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
党支部承诺书范文
2014/03/28 职场文书
中学生操行评语
2014/04/24 职场文书
2014年物流工作总结
2014/11/25 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
学生会招新宣传语
2015/07/13 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python