详解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 相关文章推荐
javascript eval和JSON之间的联系
Dec 31 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
js的toLowerCase方法用法实例
Jan 27 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
Jun 25 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
Oct 26 Javascript
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
JavaScript 异步调用
Oct 25 Javascript
详解PHP后期静态绑定分析与应用
Mar 21 Javascript
javascript刷新父页面方法汇总详解
Oct 10 Javascript
简单了解JS打开url的方法
Feb 21 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
DOTA2 6.87版本后新眼位详解攻略
2020/04/20 DOTA
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
PHP脚本数据库功能详解(下)
2006/10/09 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
为python设置socket代理的方法
2015/01/14 Python
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
在Python的Django框架中使用通用视图的方法
2015/07/21 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
keras 多gpu并行运行案例
2020/06/10 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
法律专业自我鉴定
2013/10/03 职场文书
销售演讲稿范文
2014/01/08 职场文书
高中生自我评语大全
2014/01/19 职场文书
行政司机岗位职责
2015/04/10 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
小学毕业感言100字
2015/07/30 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis