VSCode配置react开发环境的步骤


Posted in Javascript onDecember 27, 2017

vscode 默认配置对于 react 的 JSX 语法不友好,体现在使用自动格式化或者粘贴后默认缩进错误,尽管可以通过改变 language mode 缓解错误,但更改 language mode 后的格式化依然不够理想。

通过搭配使用 ESLint 和 Prettier 插件可以实现在 vscode 中完美支持 JSX 语法。

编辑器安装插件

在 vscode 中需要安装下面插件:

  1. ESLint
  2. Prettier

项目中的配置

配置ESLint

基础配置

项目中安装 babel-eslint , eslint-plugin-jsx-a11y , eslint-plugin-react 依赖:

npm install babel-eslint eslint-plugin-jsx-a11y eslint-plugin-react --save-dev

推荐的 ESLint 配置如下(修改 .eslintrc )

{
 // Use the AirBnB JS styleguide - https://github.com/airbnb/javascript
 "extends": "airbnb",

 // We use 'babel-eslint' mainly for React Native Classes
 "parser": "babel-eslint",
 "ecmaFeatures": {
  "classes": true,
 },

 // jsx相关插件
 "plugins": ["react", "jsx-a11y", "import"]

 // We can add/overwrite custom rules here
 "rules": {
  // React Native has JSX in JS files
  "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }],

  // React Native includes images via require("../images/example.png")
  "global-require": 0
 }
}

需要注意几点:

  1. 如果使用 yarn 安装,需要手动创建 .eslintrc 文件
  2. 如果在使用过程中 eslint 报错,提示缺少依赖,安装相关依赖就好

可能遇到的问题

如果在项目中文件名后缀是 .js 而不是 .jsx ,可能会遇到下面的错误:

[eslint] JSX not allowed in files with extension '.js' (react/jsx-filename-extension)

在 .eslintrc 中添加新的 rules 允许 .js 和 .jsx 后缀就好:

"rules": {
 "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }]
}

react-native 0.49 及以后版本已经不建议使用 .jsx 为后缀了,参考这个讨论 No .jsx extension?

props validation 错误

[eslint] 'navigation' is missing in props validation (react/prop-types)

检测 props 的类型有助于写出复用组件,最好不要把这个提醒关掉,如果一定要关,添加下面规则:

"rules": {
 "react/prop-types": 0
}

配置Prettier

我们想要的效果是: 配置 Prettier 按照 ESLint 的规则保存文件时自动格式化 JSX 代码 ,步骤如下:

项目中安装 prettier-eslint

npm install prettier-eslint --save-dev

配置 vscode workspace

在 vscode workspace 用户自定义部分添加如下代码:

// Format a file on save. 
// A formatter must be available, 
// the file must not be auto-saved, 
// and editor must not be shutting down.
"editor.formatOnSave": true,
  
// Enable/disable default JavaScript formatter (For Prettier)
"javascript.format.enable": false,
  
// Use 'prettier-eslint' instead of 'prettier'. 
// Other settings will only be fallbacks 
// in case they could not be inferred from eslint rules.
"prettier.eslintIntegration": true,

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript动态改变img的src属性图片不显示的解决方法
Oct 20 Javascript
js控制滚动条缓慢滚动到顶部实现代码
Mar 20 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
Nov 21 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
关于延迟加载JavaScript
May 05 Javascript
Jquery ajax请求导出Excel表格的实现代码
Jun 08 Javascript
JS生成不重复的随机数组的简单实例
Jul 10 Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 Javascript
Vue框架之goods组件开发详解
Jan 25 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
Jan 21 Javascript
js实现拖拽元素选择和删除
Aug 25 Javascript
JavaScript通如何过RGraph实现动态仪表盘
Oct 15 Javascript
在vue项目中安装使用Mint-UI的方法
Dec 27 #Javascript
AngularJS集合数据遍历显示的实例
Dec 27 #Javascript
vue.js整合mint-ui里的轮播图实例代码
Dec 27 #Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
Dec 27 #Javascript
Vue 过滤器filters及基本用法
Dec 26 #Javascript
Javascript防止图片拉伸的自适应处理方法
Dec 26 #Javascript
Vue工程模板文件 webpack打包配置方法
Dec 26 #Javascript
You might like
关于PHP实现异步操作的研究
2013/02/03 PHP
PHP 如何获取二维数组中某个key的集合
2014/06/03 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Python中的heapq模块源码详析
2019/01/08 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
开办加工厂创业计划书
2014/01/03 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技