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 相关文章推荐
ExtJS的拖拽效果示例
Dec 09 Javascript
JavaScript实现自动变换表格边框颜色
May 08 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
Aug 06 Javascript
禁用backspace网页回退功能的实现代码
Nov 15 Javascript
微信小程序 数据遍历的实现
Apr 05 Javascript
浅谈vue路径优化之resolve
Oct 13 Javascript
JQuery 又谈ajax局部刷新
Nov 27 jQuery
JS实现带动画的回到顶部效果
Dec 28 Javascript
vue数据传递--我有特殊的实现技巧
Mar 20 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
Sep 10 Javascript
vue项目上传Github预览的实现示例
Nov 06 Javascript
taro小程序添加骨架屏的实现代码
Nov 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文件的实现方法
2007/03/19 PHP
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
js实现交通灯效果
2017/01/13 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
Python 创建子进程模块subprocess详解
2015/04/08 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
yy生日主持词
2014/03/20 职场文书
学习保证书范文
2014/04/30 职场文书
物资采购方案
2014/06/12 职场文书
党员公开承诺书2015
2015/01/21 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2016教师节问候语
2015/11/10 职场文书
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python
Redis的字符串是如何实现的
2021/10/24 Redis
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL
python实现学生信息管理系统(面向对象)
2022/06/05 Python