关于 create-react-app 自定义 eslint文件配置解决方案

create-react-app项目自定义eslitn配置方式

方案一 eject 项目webpack配置进行自定义

这个方案比较low,不建议使用。这里不讲解了。

方案二  在 package.json 中的 script 命令 添加环境变量 EXTEND_ESLINT=treu 开启自定义

react-script4.x版本以下可用这个方案

我们可以打开react-script 源码看到 webpack.config.js 文件

当环境变量设定为true时候,react-script会认为我们自定义eslint配置,不启用 eslint-config-react-app 的配置。

但是开启这个变量我们只能在package.json中的 eslintConfig 字段进行配置自定义,无法通过根目录 .eslintrc 配置,所以不建议使用。我们使用第三方案

方案三 react-app-rewired 和 customize-cra

react-app-rewired 和 customize-cra 是用于对react-scripts手脚架包装一次进行使用,可不对react eject 就可以对项目自定义webpack,仅限于react-scriptr4.x以下。

1.先安装依赖 

npm i react-app-rewired customize-cra -D

2.在项目跟目录创建 config-overrides.js 内容如下

const { override, addWebpackAlias, useEslintRc } = require('customize-cra')
const path = require('path')module.exports = override(// 注意,一定要用 path.resolve 引入eslint的配置文件,否则不生效useEslintRc(path.resolve(__dirname, './.eslintrc.json')),// 配置路径别名addWebpackAlias({'@': path.resolve(__dirname, './src'),'_c': path.resolve(__dirname, './src/components')})
)

3.修改 package.json 的命令 

"start": "cross-env REACT_APP_API=development PORT=3005 react-app-rewired start",

4.然后在根目录创建 .eslintrc.json 进行自定义eslint配置即可。这里分享一下我们团队eslint配置,具体更多配置,大家可自己到eslint官网进行参考, 0 表示关闭,1 表示警告,2 表示严重错误

{"env": {"node": true,"mocha": true,"jest": true,"es6": true,"browser": true},"extends": ["eslint:recommended","plugin:react/recommended"],"parser": "babel-eslint","parserOptions": {"ecmaFeatures": {"jsx": true},"ecmaVersion": 6,"sourceType": "module"},"plugins": ["react","jsx-a11y","react-hooks"],"settings": {"react": {"version": "detect"}},"globals": {"JSX": true,"React": true,"NodeJS": true,"Promise": true},"rules": {"no-console": [1, { "allow": ["error"] }],"consistent-return": 2,"curly": [2, "multi-or-nest"],"dot-location": 0,"eqeqeq": 2,"no-alert": 2,"no-eq-null": 2,"no-lone-blocks": 2,"no-return-await": 2,"no-unused-expressions": 2,"no-label-var": 1,"array-bracket-spacing": 2,"brace-style": 0,"comma-spacing": 1,"consistent-this": 1,"eol-last": 0,"multiline-ternary": [1, "always-multiline"],"new-cap": [2, { "capIsNew": false }],"no-trailing-spaces": 0,"semi": ["error", "never"],"space-before-blocks": 2,"space-in-parens": 2,"spaced-comment": 2,"switch-colon-spacing": ["error", { "after": true, "before": false }],"arrow-spacing": 2,"quotes": [0, "single"],"key-spacing": 2,"comma-dangle": ["error", "never"],"react-hooks/exhaustive-deps": 0,"no-empty-function": 1,"react-native/no-inline-styles": 0,"react/forbid-prop-types": 0,"react/prop-types": 0,"react/display-name": 0,"prefer-promise-reject-errors": 0,"react/no-array-index-key": 2,"react/no-unused-state": 2,"react/jsx-indent-props": 1,"react/jsx-no-comment-textnodes": 1,"react/jsx-no-duplicate-props": 2,"react/jsx-no-target-blank": [1, { "enforceDynamicLinks": "always" }],"react/jsx-no-undef": 2,"react/jsx-props-no-multi-spaces": 1,"react/jsx-tag-spacing": 1,"react/jsx-uses-vars": 2,"react/jsx-wrap-multilines": 2,"react-hooks/rules-of-hooks": 2}
}

方案4 react-script 4.x 方案

react17 官方团队修改了脚手架允许直接在外部声明.eslintrc文件覆盖eslint配置。不需要对package和react-app-rewired 和 customize-cra就可用实现eslint 配置。

在根目录创建文件 .eslintrc.json,配置的extends 字段需要改一下

{"env": {"node": true,"mocha": true,"jest": true,"es6": true,"browser": true},"extends": ["eslint:recommended","plugin:react/recommended","plugin:react-hooks/recommended"],"parser": "babel-eslint","parserOptions": {"ecmaFeatures": {"jsx": true},"ecmaVersion": 6,"sourceType": "module"},"plugins": ["react","jsx-a11y","react-hooks"],"settings": {"react": {"version": "detect"}},"globals": {"JSX": true,"React": true,"NodeJS": true,"Promise": true},"rules": {"no-console": [1, { "allow": ["error"] }],"consistent-return": 2,"curly": [2, "multi-or-nest"],"dot-location": 0,"eqeqeq": 2,"no-alert": 2,"no-eq-null": 2,"no-lone-blocks": 2,"no-return-await": 2,"no-unused-expressions": 2,"no-label-var": 1,"array-bracket-spacing": 2,"brace-style": 0,"comma-spacing": 1,"consistent-this": 1,"eol-last": 0,"multiline-ternary": [1, "always-multiline"],"new-cap": [2, { "capIsNew": false }],"no-trailing-spaces": 0,"semi": ["error", "never"],"space-before-blocks": 2,"space-in-parens": 2,"spaced-comment": 2,"switch-colon-spacing": ["error", { "after": true, "before": false }],"arrow-spacing": 2,"quotes": [0, "single"],"key-spacing": 2,"comma-dangle": ["error", "never"],"react-hooks/exhaustive-deps": 0,"no-empty-function": 1,"react-native/no-inline-styles": 0,"react/forbid-prop-types": 0,"react/prop-types": 0,"react/display-name": 0,"prefer-promise-reject-errors": 0,"react/no-array-index-key": 2,"react/no-unused-state": 2,"react/jsx-indent-props": 2,"react/jsx-no-comment-textnodes": 1,"react/jsx-no-duplicate-props": 2,"react/jsx-no-target-blank": [1, { "enforceDynamicLinks": "always" }],"react/jsx-no-undef": 2,"react/jsx-props-no-multi-spaces": 1,"react/jsx-tag-spacing": 1,"react/jsx-uses-vars": 2,"react/jsx-wrap-multilines": 2,"react-hooks/rules-of-hooks": 2}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS UILabel组件

UILabel 是 IOS 显示文字的组件,继承与UIView 属性 名称类型说明默认值textproperty(nullable, nonatomic,copy) NSString文字nilfontproperty(null_resettable, nonatomic,strong) UIFont字体大小17textColorproperty(null_resettable, nonatomic,strong) UIColor…

IOS 代理模型

代理模式在IOS经常使用&#xff0c;在IOS中使用代理模式非常简单。 A类文件&#xff08;协议&#xff09; a.h 中声明协议 protocol Button <NSObject> // 声明代理协议 - (void) onClick; // 可以代理的方法 - (void) onDown: (UIButton*) event; // 可以代理的方法 e…

IOS UIView 对象详解

UIView 是所有可以显示在屏幕的对象的父类&#xff0c;是一个矩形的对象 名称类型说明默认值boundsCGRect以自己左上角为原点坐标设置位置和尺寸nilframeCGRect以父级视图点左上角为原点设置位置和尺寸niltagNSInteger当前对象点标识&#xff0c;可以当作idnilconterCGPoint视图…

关于在node.js 中使用formData 发送axios上传文件失败解决方案

最近用到了node.js进行文件上传到其他服务器&#xff0c;在使用formData 上传时候遇到对方接口处理失败问题 问题原因 因为node.js 中 axios 没法识别 Content-Type 设置&#xff0c;所以我们要调用 fromData.getHaders 进行配置 const file readFile(path) const form new…

IOS UIWindow 和 UIScreen

通常UIWindow 与 UIScreen 是配合使用的。当我们想自定义window对象或者获取硬件屏幕大小必定会用到 UIWindow 和 UIScreen UIWindow 一个APP只有一个UIWindow 对象&#xff0c;表示当前窗口对象。UIWindow 继承于 UIView。 通常使用Window 自定义根节点的 UIViewController。…

IOS UIViewController API,生命周期详解

在UIKit框架中只有一个根制图控制器。视图控制器用来管理界面和处理界面的类对象&#xff0c;程序启动前必须创建根视图控制器。所有视图控制器都需要自定义完成&#xff0c;必须继承于UIViewController 实现。xcode新创建的项目默认是通过info.plist 文件配置 main.storyboard…

IOS 定时器 NSTimer

定时器对象,在OC中&#xff0c;定时器对象是NSTimer类型 //ViewController.h #import <UIKit/UIKit> interface ViewController: UIViewController {NSTimer *_timer; // 声明一个定时器对象int _time_num; } //ViewController.m #import "ViewController.h" …

冻结和只读取当前对象的属性,不读取对象原型的属性

Object.entries(obj) Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组&#xff0c;其排列与使用 for…in 循环遍历该对象时返回的顺序一致&#xff08;区别在于 for-in 循环还会枚举原型链中的属性&#xff09;。 const object1 {a: somestring,b: 42 };fo…

IOS UISwitch 组件的使用

UISwtch 在许多场景中会使用到&#xff0c;通常用来坐设置开关等行为。下面我们来看一下IOS 中 UISwitch 等用法。注意&#xff1a;UISwitch 无法通过 frame 设置宽高 UISwitch* _switch [[UISwitch alloc] init];// 设置状态和开启动画[_switch setOn:NO animated:YES];// 设…

IOS 开发 UIProgress 和 UISlidre 进度条和滑动条组件

进度条和滑动条组件非常常见&#xff0c;在ios中进度条组件是无法响应事件的。滑动条可响应事件。但是这两个组件均不可设置高度&#xff0c;可设置x,y,width 进度条属性 名称类型说明默认值progressViewStyleUIProgressViewStyle进度条样式UIProgressViewStyleDefaultprogres…

OC 中数字转字符串和浮点数转整数等转换

浮点数转字符串 float value 0.2; NSString* text [[NSString alloc] initWithFormat:"%f", value];整数转字符串 int value 10; NSString* text [[NSString alloc] initWithFormat:"%d", value];NSInteger 转字符串 NSInteger value 10; NSString…

IOS ActivityIndicator 活动指示器使用

IOS中活动指示器的使用非常简单。 UIActivityIndicatorView* _activity [[UIActivityIndicatorView alloc] init];// 设置位置_activity.frame CGRectMake(180, 100, 80, 80);// 设置菊花样式[_activity setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleLarge];/…

IOS 模态弹窗与操作版使用 UIAlertController

IOS8 以后UIAlertView 改用 UIAlertController 实现模态窗和操作板。UIAlertController 的使用与UIAlerView 非常不同&#xff0c;它实际上是把弹窗内容与显示方式、按钮列表、分离。实现起来非常简单。如下 1.调用静态方法创建弹窗控制器 alertControllerWithTitle 声明弹窗控…

IOS 单行文本输入框 UITextField 使用

UITextField 继承 UIControl 类&#xff0c;只支持单行输入和显示&#xff0c;可输入密码类型。支持实现代理 UITextFieldDelegate 属性 名称类型说明默认值textNSString文本输入值textColorUIColor文本颜色UIFontUIFont文本大小textAlignmentNSTextAlignment文本方向NSLeftTe…

OC 中NSString与NSString 的比较

OC 中 字符串是一个对象&#xff0c;所以不能使用 进行比较是否相等。因为两个字符串的内存地址可能不一样&#xff0c;但是内容一样。所以我们要使用其他方法进行比较运算。 isEqualToString if (["2121" isEqualToString:"2121"]) {NSLog("一致&q…

javascript 对象比较是否属于同一类型对象。

js属于动态类型语言&#xff0c;那么我们如何判断 A实例是否和 b对象实例属于同一类型呢&#xff1f;比如 array array &#xff0c;Error Error&#xff0c;自定义类的实例比较 等等对象类型判断。如果只用 typeof 肯定是不行的。因为不管 array 还是 object、error、或自定…

IOS UIScrollView 滚动视图的使用和文档

UIScrollView 是一个可滚动的视图列表&#xff0c;在app中非常常见。下面简单的介绍一下UIScrollView 的用法。可实现代理UIScrollViewDelegate // 实例化UIScrollViewUIScrollView* _scrollView [[UIScrollView alloc] init];// 获取屏幕大小UIScreen* screen [UIScreen mai…

css 开启硬件加速的系统级控件

css 开启硬件加速的系统级控件 1.h5在真机上有时候会出现滑动白屏问题&#xff0c;可以开启硬件加速系统级控件进行加速滑屏加速 body{-webkit-overflow-scrolling: touch;overflow: scroll; }2.h5开启动画硬件加速 div{transform: translate(0px); }

js 动态创建注释节点 createComment

const comment document.createComment(注释) document.body.appen(commnet)

解决 sessionStroage 无法在多个标签页共享数据的问题

1.改用 cookie 方式存储数据 2.利用 window.addEventListener(‘stroage’) 监听stroage变化事件进行回调共享数据 1.全局监听stroage事件 通过监听localStroage的数据变化进去读取出token值后进行localStroage删除 window.addEventListener(stroage, (e) > {if (e.stora…