详解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 相关文章推荐
关于js类的定义
Jun 28 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
Jan 27 Javascript
jQuery 文本框得失焦点的简单实例
Feb 19 Javascript
JS模拟按钮点击功能的方法
Dec 22 Javascript
JS使用onerror捕获异常示例
Aug 03 Javascript
浅析javascript中的Event事件
Dec 09 Javascript
加载 vue 远程代码的组件实例详解
Nov 20 Javascript
JavaScript实现一个带AI的井字棋游戏源码
May 21 Javascript
详解js删除数组中的指定元素
Oct 31 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
May 29 Javascript
vue中重定向redirect:‘/index‘,不显示问题、跳转出错的完美解决
Sep 28 Javascript
vue 中 get / delete 传递数组参数方法
Mar 23 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简单浏览目录内容的实现代码
2013/06/07 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
vue内置指令详解
2018/04/03 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
JavaScript实现简单动态表格
2020/12/02 Javascript
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
Python数据库的连接实现方法与注意事项
2016/02/27 Python
Python连接DB2数据库
2016/08/27 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
Python3操作YAML文件格式方法解析
2020/04/10 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
英国时尚家具、家居饰品及礼品商店:Graham & Green
2016/09/15 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
个人收入证明范本
2015/06/12 职场文书
Python  lambda匿名函数和三元运算符
2022/04/19 Python