1 在VSCode中单独使用Prettier保存代码自动格式化的配置方法

1.1 为什么要使用Prettier?

手动调整代码格式,不仅低效,而且在团队协作开发中,无法保证代码风格统一,所以需要引入自动格式化代码工具。Prettier不仅可以格式化js, jsx, vue,angular,ts,flow,还适用于HTML, CSS/Less,/Sass,Markdown, YAML,  GraphQL代码的格式化,

1.2 Prettier代码格式化规则有哪些?

{
printWidth: 80, // 超过最大值换行
tabWidth: 2, // 缩进字节数
useTabs: false, // 缩进不使用tab,使用空格
semi: true, // 句尾添加分号
singleQuote: false, // 使用单引号代替双引号
quoteProps: 'as-needed', // 对象的key是否用引号括起来,有三种选项 "as-needed"|"consistent"|"preserve"
jsxSingleQuote: false, // 在jsx中使用单引号代替双引号
trailingComma: 'es5', // 选项:none|es5|all, 在对象或数组最后一个元素后面是否加逗号(在ES5中加尾逗号)
bracketSpacing: true, // 是否在对象的{}内部两侧加空格 true - { foo: bar } false - {foo: bar}.
jsxBracketSameLine: false, // 在jsx中把'>' 是否单独放一行
arrowParens: 'avoid', // (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号 'bracketSpacing': true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }"
rangeStart: 0, // 仅格式化选中文本 选中文本格式化的起始位置
rangeEnd: Infinity, // 选中文本格式化的结束位置
parser: 'babylon', // 格式化的解析器,默认是babylon,会自动根据输入文件推断,不用更改设置
requirePragma: false, // 若为true,文件顶部加了 /*** @prettier */或/*** @format */的文件才会被格式化
insertPragma: false, // 当requirePragma参数为true时,此参数为true将向@format标记后面添加一个换行符
proseWrap: 'preserve', // 有效选项[always|never|preserve]。当Markdown文本超过printWidth时,是否换行,always-换行 never-不换行 preserve保持原样
endOfLine: 'lf', // 结尾是 lf-\n cr-\r lfcr-\n\r auto-保持现有的行尾设置
htmlWhitespaceSensitivity: 'css', // 是否显示HTML文件中的空格。 有效选项: 'css' - 尊重CSS display属性的设置。 'strict' - 空格被认为是敏感的。 'ignore' - 空格被认为是不敏感的
vueIndentScriptAndStyle: false, // 是否给vue中的 <script> and <style>标签加缩进
embeddedLanguageFormatting: 'auto', // 是否格式化嵌入到JS中的html标记的代码段或者Markdown语法 auto-格式化 off-不格式化
}

1.3 如何开启保存时代码自动格式化?

1.3.1 下载Prettier插件

在vscode的配置文件中,设置保存代码时使用prettier自动进行代码格式化

{
"javascript.format.enable": false, // 禁用vscode默认的js格式化插件
"editor.formatOnSave": true, // 保存代码的时候格式化
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" // js文件采用prettier进行格式化
},
}

配置完之后,保存代码时,就有自动格式化的效果。

2.ESLint代码校验配置

2.1 有了Prettier之后,为什么还需要ESLint?

prettier只关心代码格式,这显然是不够的,我们追求的目标不仅仅是代码风格统一,还要在书写的时候,避免一些常见的低级的错误。所以,就要引入ESlint。ESLint也有许多与代码规则有关的配置项,那你可能要问,我只用eslint就好了,既能规范编码风格,也能提升代码质量。何必两个都用,用了还容易起冲突,这是因为eslint的代码格式化有盲区,只针对js,jsx,ts,tsx,不能格式化HTML, CSS/Less,/Sass,Markdown, YAML,  GraphQL,以及vue中的html和css。

2.2 Prettier和ESLint为什么会冲突?

Prettier的功能比较专一,是专门用来格式化代码的,格式化代码的范围比ESLint广泛。

ESLint的功能相对综合,大体可以分为类,一类是规范代码风格(见下图),一类是规范代码质量。

它们之所以会冲突,就是因为井水犯了河水,功能有交叉,而且规则不同,比如Prettier格式化代码,默认每行后面加分号,而ESLint的规则是不加,再比如Prettier格式化代码时,字符串会用双引号包起来,而ESLint的规则是单引号,由此就产生的冲突。

2.3 如何解决两者的冲突?

要么修改Prettier的规则,使之与ESLint保持一致,要么修改ESLint的校验规则,使之与Prettier的代码格式化风格一致,究竟要改哪一个,都可以。个人倾向于改ESlint的规则,因为Prettier的代码格式化规则是普适的,而ESLint的代码校验规则是针对特定语言的,特定的遵从普适的原则上好一些。

ESLint有关代码风格的设置,有些是于Prettier冲突的,安装eslint-config-prettier npm工具包,就可以关闭eslint代码风格部分与prettier冲突的设置。

yarn add  -D eslint-config-prettier

在.eslintrc.js中添加

{
"extends": [
"some-other-config-you-use",
"prettier"
]
}

2.3 vscode 保存时自动修复eslint报错的配置

2.3.1 安装ESLint插件

2.3.2 在.vscode中setting.json中开启代码保存自动修复eslint告警功能
  "editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
2.3.3 在项目下添加.eslintrc.js文件,内容如下:
module.exports = {
parser: 'babel-eslint',
parserOptions: {
// 想使用的额外的语言特性
ecmaFeatures: {
legacyDecorators: true, // 装饰器
},
},
// 添加共享设置
settings: {
polyfills: ['fetch', 'promises', 'url', 'object-assign'],
},
// extends 属性值可以省略包名的前缀 eslint-config-
// 你可能想要将你的配置信息分享给其他项目或人。可分享的配置允许你在 npm 发布你的配置设置并且其他人可以在他的 ESLint 项目中下载使用这些配置。
// 可共享的配置 是一个 npm 包,它输出一个配置对象。
extends: ['airbnb', 'prettier', 'plugin:compat/recommended'],
// 插件一般是输出规则,一些插件也可以输出一个或多个命名的 配置
plugins: ['react'],
// 指定脚本的运行环境。每种环境都有一组特定的预定义全局变量。
env: {
browser: true,
node: true,
es6: true,
mocha: true,
jest: true,
jasmine: true,
},
globals: {
localStorage: true,
sessionStorage: true,
WeixinJSBridge: true,
screen: true,
wx: true,
qq: true,
alert: true,
Image: true,
File: true,
FormData: true,
IntersectionObserver: true,
fiboSDK: true,
},
rules: { // 规则集,会覆盖extends中的规则
'react/jsx-filename-extension': [1, { extensions: ['.js'] }],
'react/jsx-wrap-multilines': 0,
'react/prop-types': 0,
'react/forbid-prop-types': 0,
'react/jsx-one-expression-per-line': 0,
'import/no-unresolved': [2, { ignore: ['^@/', '^umi/'] }],
'import/no-extraneous-dependencies': [0],
'jsx-a11y/no-noninteractive-element-interactions': 0,
'jsx-a11y/click-events-have-key-events': 0,
'jsx-a11y/no-static-element-interactions': 0,
'jsx-a11y/anchor-is-valid': 0,
'linebreak-style': 0,
'no-console': 0,
'import/prefer-default-export': 0,
'react/destructuring-assignment': 0,
'consistent-return': 0,
'no-return-assign': 0,
'no-case-declarations': 0,
'react/no-array-index-key': 0,
'no-plusplus': 0,
'no-param-reassign': 0,
'no-useless-escape': 0,
'array-callback-return': 0,
'no-unused-expressions': 0,
'no-underscore-dangle': 0,
'no-lonely-if': 0,
'func-names': 0,
'react/no-access-state-in-setstate': 0,
'react/no-did-update-set-state': 0,
'no-restricted-syntax': 0,
'no-nested-ternary': 0,
'no-restricted-globals': 0,
'react/jsx-props-no-spreading': 0,
'class-methods-use-this': 0,
'global-require': 0,
'react/state-in-constructor': 0,
'import/no-dynamic-require': 0,
'react/no-danger': 0,
'react/sort-comp': 0,
'no-shadow': 0,
camelcase: 0,
// 不检验函数入参是否被使用
'no-unused-vars': ['warn', { args: 'none' }],
},
};

参考文献

 

VSCode-Prettier和ESLint如何和睦共处?的更多相关文章

  1. 在vscode中使用eslint+prettier格式化vue项目代码 (转载)

    ESlint:javascript代码检测工具,可以配置每次保存时格式化js,但每次保存只格式化一点点,你得连续按住Ctrl+S好几次,才格式化好,自行体会~~ vetur:可以格式化html.标准c ...

  2. vscode 中 eslint prettier 和 eslint -loader 配置关系

    前置 本文将探究 vscode prettier 插件 和 eslint 插件在 vscode 中的配置以及这两者对应的在项目中的配置文件的关系,最后提及 vscode eslint 插件配置与 es ...

  3. 在VSCode中配置Eslint格式化

    在VSCode中配置Eslint 格式化时使代码保持Eslint语法规范 安装Eslint以及prettier美化插件 在VSCode配置设置项中添加如下代码 { "workbench.co ...

  4. vscode设置VUE eslint开发环境

    我的使用vscode开发VUE的常用设置 1.安装插件 ESLint Vetur Beautify Prettier - Code formatter Auto Rename Tag -重命名标签,闭 ...

  5. vscode如何安装eslint插件 代码自动修复

    ESlint:是用来统一JavaScript代码风格的工具,不包含css.html等. 方法和步骤: 通常情况下vue项目都会添加eslint组件,我们可以查看webpack的配置文件package. ...

  6. vscode vue 格式化 ESLint 检查 单引号 双引号 函数括号报错问题

    vscode vue 格式化 最近重新搞了下电脑,重装了 vscode 软件,在用 vue 写项目的时候,照例开启了 ESLint 语法检查,但是发现在使用 vscode 格式化快捷键的时候(shif ...

  7. eslint prettier vetur eslint

    VScode (版本 1.47.3)安装 eslint prettier vetur 插件 .vue 文件使用 vetur 进行格式化 在文件 .prettierrc 里写 属于你的 pettier ...

  8. 在vscode中使用eslint

    一.vs中安装eslint插件 二.npm 全局安装 eslint   sudo npm i -g eslint 三.vs终端运行eslint --init 四.在vscode的setting中设置 ...

  9. VScode eslint-plugin-vue 自动修复eslint报错

    1.安装插件 npm i -g eslint-plugin-vue 2.修改项目跟路径下的文件:.eslintrc | .eslint.js 3.添加eslint 和 vetur 插件 4.修改vsc ...

随机推荐

  1. hive中一般取top n时,row_number(),rank,dense_ran()常用三个函数

    一. 分区函数Partition By与row_number().rank().dense_rank()的用法(获取分组(分区)中前几条记录) 一.数据准备 --1.创建学生成绩表 id int,   ...

  2. Codeforces Round #695 (Div. 2)

    比赛地址 A (水题) 题目链接 题目: 给出\(n\)个面板,每个面板初始时间相同,每过1s面板上数字会加1(数字在\(0\sim9\)循环播放),任意时刻选择一个面板\(x\)使他的时间停止,其他 ...

  3. 一个简单的字符串,为什么 Redis 要设计的如此特别

    Redis 的 9 种数据类型 本文GitHub已收录:https://zhouwenxing.github.io/ Redis 中支持的数据类型到 5.0.5 版本,一共有 9 种.分别是: 1.B ...

  4. 用python+sklearn(机器学习)实现天气预报数据 数据

    用python+sklearn机器学习实现天气预报 数据 项目地址 系列教程 勘误表 0.前言 1.爬虫 a.确认要被爬取的网页网址 b.爬虫部分 c.网页内容匹配取出部分 d.写入csv文件格式化 ...

  5. Mac最新Flutter环境搭建运行和对比理解声明式UI

    前言 这段时间一直都在学习和写关于SwiftUI的东西,前面也总结了四篇文章来大体上说了下Demo中功能实现的一些细节,后面准备开始了解学习一下Flutter,争取在年前能再用Flutter写一份项目 ...

  6. 常见大中型网络WLAN基本业务实例

    组网图形 大中型WLAN网络简介 本文介绍的WLAN网络是指利用频率为2.4GHz或5GHz的射频信号作为传输介质的无线局域网,相对于有线网络的铺设成本高,不便于网络调整和扩展.位置固定,移动性差等缺 ...

  7. 【Azure Redis 缓存】Azure Redis功能性讨论

    关于使用Azure Redis服务在以下九大方面的功能性的解说: 高可用 备份可靠性 配置自动化 部署多样性 快速回档功能 数据扩容 SLA稳定性 数据安全性 监控系统 一:高可用 Azure Cac ...

  8. 剑指offer之重建二叉树

    1.问题描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.        例如输入前序遍历序列pre {1,2,4,7,3,5,6, ...

  9. LeetCode202. 快乐数

    题目 编写一个算法来判断一个数 n 是不是快乐数. 快乐数定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1, 也可能是 无限循环 但始终变不到 ...

  10. XSS类型,防御及常见payload构造总结

    什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 最直接的例子:&l ...