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 相关文章推荐
用Javscript实现表单复选框的全选功能
May 25 Javascript
Mootools 1.2教程 函数
Sep 15 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
May 27 Javascript
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
Nov 23 Javascript
mailto的使用技巧分享
Dec 21 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
Jun 01 Javascript
JS采用绝对定位实现回到顶部效果完整实例
Jun 20 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
May 19 jQuery
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
Jul 27 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
phpwind中的数据库操作类
2007/01/02 PHP
php自动加载的两种实现方法
2010/06/21 PHP
php curl选项列表(超详细)
2013/07/01 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
自动更新作用
2006/10/08 Javascript
关于Javascript 的 prototype问题。
2007/01/03 Javascript
javascript 定义初始化数组函数
2009/09/07 Javascript
Ext grid 添加右击菜单
2009/11/26 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
python超简单解决约瑟夫环问题
2015/05/12 Python
Python定时器实例代码
2017/11/01 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
pycharm debug功能实现跳到循环末尾的方法
2018/11/29 Python
django框架面向对象ORM模型继承用法实例分析
2019/07/29 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
写求职信有哪些注意事项
2014/05/08 职场文书
计算机网络专业自荐书
2014/06/09 职场文书
主题党日活动总结
2014/07/08 职场文书
运动会演讲稿300字
2014/08/25 职场文书
贪污受贿检讨书范文
2014/11/19 职场文书
人民检察院起诉书
2015/05/20 职场文书
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
vue特效之翻牌动画
2022/04/20 Vue.js