详解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 相关文章推荐
web 页面分页打印的实现
Jun 22 Javascript
javascript 特性检测并非浏览器检测
Jan 15 Javascript
jquery win 7透明弹出层效果的简单代码
Aug 06 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
JQuery validate插件Remote用法大全
May 15 Javascript
js带闹铃功能的倒计时代码
Sep 29 Javascript
Angular多选、全选、批量选择操作实例代码
Mar 10 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
创建Vue项目以及引入Iview的方法示例
Dec 03 Javascript
webpack-mvc 传统多页面组件化开发详解
May 07 Javascript
vue实现两个组件之间数据共享和修改操作
Nov 12 Javascript
jQuery实现简单弹幕制作
Dec 10 jQuery
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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
php5.3 废弃函数小结
2010/05/16 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
Python标准库与第三方库详解
2014/07/22 Python
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
python学习必备知识汇总
2017/09/08 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
new修饰符是起什么作用
2015/06/28 面试题
保险公司年会主持词
2014/03/22 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
民事和解协议书格式
2014/11/29 职场文书
高中班主任评语
2014/12/30 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Go 语言结构实例分析
2021/07/04 Golang
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫