详解create-react-app 自定义 eslint 配置


Posted in Javascript onJune 07, 2018

使用eslint和editorconfig规范代码

为什么要用这些:

  1. 代码规范有利于团队协作
  2. 纯手工规范耗时耗力而且不能保证准确性
  3. 能配合编辑器自动提醒错误,提高开发效率

eslint

随着ECMAScript版本一直更新的Js lint工具,插件丰富,并且能够套用规范,规则非常丰富,能够满足大部分团队的需求。

eslint 配合 git

为了最大程度控制每个人的规范,我们可以在git commit代码的时候,使用git hook调用eslint进行代码规范验证,不规范的代码无法提交到仓库。

editorconfig

不同编辑器对文本的格式会有一定的区别,如果不统一一些规范,可能你和别人合作的时候每次更新下来别人的代码就会出一大堆错误-webstorm自动支持editorconfig配置文件。

首先安装eslintnpm i eslint 因为create-react-app默认已经安装了

"babel-eslint": "7.2.3",
  "eslint": "4.10.0",
  "eslint-config-react-app": "^2.1.0",
  "eslint-loader": "1.9.0",
  "eslint-plugin-flowtype": "2.39.1",
  "eslint-plugin-import": "2.8.0",
  "eslint-plugin-jsx-a11y": "5.1.1",
  "eslint-plugin-react": "7.4.0",

我们针对我们想要的自定义配置,我们再安装如下

npm i babel-eslint \
\ eslint-config-airbnb eslint-config-standard \
\ eslint-loader \
\ eslint-plugin-import \
\ eslint-plugin-jsx-a11y \
\ eslint-plugin-node \
\ eslint-plugin-promise \
\ eslint-plugin-react \
\ eslint-plugin-standard -D

我们在根目录下新建 .eslintrc 文件针对整个项目做一个标准的规范

{
 "extends": "standard"
}

主要项目是前端工程,所以我们在前端文件夹下新建 .eslintrc 文件,在这里去规范客户端代码,客户端代码使用 jsx,很多规则和 nodejs 是不同的,在这里使用更加严格的规范来要求客户端代码。

配置的value对应的值: 0 : off 1 : warning 2 : error

{
 "parser": "babel-eslint",
 "env": {
  "browser": true,
  "es6": true,
  "node": true
 },
 "parserOptions": {
  "ecmaVersion": 6,
  "sourceType": "module"
 },
 "extends": "airbnb",
 "rules": {
  "semi": [0],
  "react/jsx-filename-extension": [0],
  "jsx-a11y/anchor-is-valid": [0]
 }
}

使用 babel-eslint 去解析代码,定义环境是浏览器和es6,会包含公共变量,webpack所以需要node一些环境变量,parserOptions定义版本,jsmodule模式方法书写。

因为需要在每次编译之前都要去检查一下代码,所以还需要配置 webpack,这是create-react-app默认的

{
    test: /\.(js|jsx|mjs)$/,
    enforce: 'pre',
    use: [
     {
      options: {
       formatter: eslintFormatter,
       eslintPath: require.resolve('eslint'),
       
      },
      loader: require.resolve('eslint-loader'),
     },
    ],
    include: paths.appSrc,
   },

我们希望屏蔽掉 node_modules 文件夹下的代码

exclude:[path.resolve(__dirname, '../node_modules')]

在项目根目录下新建文件 .editorconfig webstom默认就有配置

  1. root = true 项目根目录
  2. [*] 所有文件都应用这个规则
  3. charset = utf-8 编码模式
  4. indent_style = space 使用 tab 的样式制表符和 space
  5. indent_size = 2
  6. end_of_line = lf 行尾结尾方式
  7. insert_final_newline = true 自动保存行尾最后一行是空行
  8. trim_trailing_whitespace = true 一行结束后面的空格自动去掉

eslint 不检测这行代码 // eslint-disable-line

eslint 不检测这个文件,在开头 /* eslint-disable */在文件结尾/* eslint-enable */

安装 npm i husky -D

然后在 package.json scripts中增加git 钩子,会在执行git commit之前会调用这个命令

"lint": "eslint --ext .js --ext .jsx src/",
"precommit": "npm run lint"

git commit 强制执行 eslint 通过的代码

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

Javascript 相关文章推荐
服务器安全设置的几个注册表设置
Jul 28 Javascript
jquery异步跨域访问代码
Jun 28 Javascript
JS读取XML文件示例代码
Nov 15 Javascript
js实现简单的联动菜单效果
Aug 19 Javascript
JS、jQuery中select的用法详解
Apr 21 Javascript
JS组件Bootstrap Table布局详解
May 27 Javascript
JavaScript仿支付宝6位数字密码输入框
Dec 29 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
Oct 27 jQuery
vue-cli和v-charts实现可视化图表过程解析
Oct 08 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
Jun 17 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
Nov 18 jQuery
Vue router安装及使用方法解析
Dec 02 Vue.js
vue.js实现标签页切换效果
Jun 07 #Javascript
js数组去重的N种方法(小结)
Jun 07 #Javascript
vue+axios新手实践实现登陆的示例代码
Jun 06 #Javascript
vue2.0实现音乐/视频播放进度条组件
Jun 06 #Javascript
vue实现简单loading进度条
Jun 06 #Javascript
security.js实现的RSA加密功能示例
Jun 06 #Javascript
Vue ElementUi同时校验多个表单(巧用new promise)
Jun 06 #Javascript
You might like
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
python入门基础之用户输入与模块初认识
2016/11/14 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
python抓取文件夹的所有文件
2018/02/27 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
Python 随机按键模拟2小时
2020/12/30 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
护理学专业求职信
2014/06/29 职场文书
部队个人年终总结
2015/03/02 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
Python Numpy之linspace用法说明
2021/04/17 Python
python简单验证码识别的实现过程
2021/06/20 Python