详解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 相关文章推荐
Jquery Validation插件防止重复提交表单的解决方法
Mar 05 Javascript
javascript简单性能问题及学习笔记
Feb 04 Javascript
JS交换变量的方法
Jan 21 Javascript
javascript包装对象实例分析
Mar 27 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
Oct 29 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
Dec 13 Javascript
js多个物体运动功能实例分析
Dec 20 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
ES6学习教程之模板字符串详解
Oct 09 Javascript
react native 原生模块桥接的简单说明小结
Feb 26 Javascript
微信小程序实现签到弹窗动画
Sep 21 Javascript
js定时器出现第一次延迟的原因及解决方法
Jan 04 Javascript
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
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
JQuery从头学起第二讲
2010/07/04 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
js尾调用优化的实现
2019/05/23 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
挂职思想汇报
2013/12/31 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python
Python一些基本的图像操作和处理总结
2021/06/23 Python
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript