Vue3中eslint代码格式化prettier和standard规则比较(为什么推荐使用prettier)
前言
在 vue-cli 创建项目时,对于 eslint 代码格式化一般我们会选 standard 或 prettier 方案,他们有什么区别和优缺点呢?
插件准备
eslint
使用 eslint 需要安装 eslint 插件,并在项目第一次打开时 allow 同意使用本机的 eslint :
prettier
使用 prettier 需要安装相应的插件:
依赖比较 - package.json
standard
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", //
"@vue/cli-plugin-eslint": "~4.5.0", //
"@vue/cli-service": "~4.5.0", //
"@vue/compiler-sfc": "^3.0.0", //
"@vue/eslint-config-standard": "^5.1.2", -
"babel-eslint": "^10.1.0", //
"eslint": "^6.7.2", //
"eslint-plugin-import": "^2.20.2", -
"eslint-plugin-node": "^11.1.0", -
"eslint-plugin-promise": "^4.2.1", -
"eslint-plugin-standard": "^4.0.0", -
"eslint-plugin-vue": "^7.0.0-0" //
}
prettier
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", //
"@vue/cli-plugin-eslint": "~4.5.0", //
"@vue/cli-service": "~4.5.0", //
"@vue/compiler-sfc": "^3.0.0", //
"@vue/eslint-config-prettier": "^6.0.0", -
"babel-eslint": "^10.1.0", //
"eslint": "^6.7.2", //
"eslint-plugin-prettier": "^3.1.3", -
"eslint-plugin-vue": "^7.0.0-0", //
"prettier": "^1.19.1" -
}
我们发现 standard 有 5 个相关依赖,而 prettier 只有 3 个相关依赖。
eslint 配置比较 - .eslintrc.js
standard
extends: [
'plugin:vue/vue3-essential', //
'@vue/standard' -
]
prettier
extends: [
"plugin:vue/vue3-essential", //
"eslint:recommended", -
"@vue/prettier" -
]
相信大家也能理解因为 prettier 的规则比较少所以需要补配一个 eslint:recommended
推荐规则
代码格式化比较
配置 prettier
对比完了 package 依赖和 eslint 配置,下面我们对比实际代码格式化区别,在这之前需要对 prettier 进行手动配置。
在项目根目录下建立一个 prettier 配置文件 .prettierrc
:
{
"semi": false,
"singleQuote": true,
"printWidth": 80
}
我们使用尤雨溪的配置,句尾不带分号 + 单引号。
-
尤雨溪配置:vue-next/.prettierrc
-
更多配置:官方配置文档
格式化方法
配置好了 prettier ,我们还需要知道如何格式化代码。
-
vscode 安装了 eslint 插件后,第一次进入项目选择 allow 允许使用本机 eslint 插件后,每次按 ctrl + s 可以进行格式化。
-
vscode 安装了 prettier 插件后,在
settings.json
配置内配置对 vue 文件的格式化:"[vue]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }
在
settings.json
配置之后,就可以在.vue
文件内按 alt + shift + f 格式化按键进行代码格式化。
template 部分
standard
<template>
<!-- 允许单双引号混用 × -->
<div class='class-name'>
text
<!-- 不会对 props 格式化,允许杂乱排序 × -->
<span
class='span-class-name'
ref="span"
key="key" :class="data"
v-if="data">
<!-- 对大括号内空格无要求,可乱加空格 × -->
{{ text}}
</span>
</div>
</template>
prettier
<template>
<!-- 由于配置了 singleQuote ,统一为单引号,不允许单双引号混用 √ -->
<div class="class-name">
text
<!-- 会对 props 格式化,超过 printWidth 自动按列排序 √ -->
<span
class="span-class-name"
ref="span"
key="key"
:class="data"
v-if="data"
>
<!-- 统一大括号内空格 √ -->
{{ text }}
</span>
</div>
</template>
得分
standard:0
prettier:3
script 部分
standard
// import 按需导入要求大括号必须有左右空格 √
import { reactive } from 'vue'
// 导入过多允许换行(必须手动) √
import {
reactive,
ref,
toRefs,
shallowRef,
computed,
watch,
setup
} from 'vue'
export default {
methods: {
// 函数后必须有空格,if 等语句同理 ×
test () {
const test = 'test'
console.log(test)
// 允许 array 内 object 自由的换行机制 √
// array 首尾中括号前后自由换行 ×
const list = [
{
key: 'value'
},
{ key: 'value' }]
// 允许小括号内自由的换行 √
const data = reactive(
{ key: 'value' }
)
// object 内允许自由的换行( return { data, list } 也可) √
return {
data,
list
}
}
}
}
prettier
// import 按需导入要求大括号必须有左右空格 √
import { reactive } from 'vue'
// 导入过多自动换行 √
import {
reactive,
ref,
toRefs,
shallowRef,
computed,
watch,
setup,
shallowReactive
} from 'vue'
export default {
methods: {
// 函数后不可有空格,if 等语句同理 √
test() {
const test = 'test'
console.log(test)
// 允许 array 内 object 自由的换行机制 √
// array 首尾中括号前后必须换行 √
const list = [
{
key: 'value'
},
{ key: 'value' }
]
// 在不超过 printWidth 时不允许自动换行,小括号也不允许手动换行(换行是无意义的) √
const data = reactive({ key: 'value' })
// object 内允许自由的换行( return { data, list } 也可) √
return {
data,
list
}
}
}
}
得分
standard:5
prettier:7
总结
总的来看,强烈推荐使用 prettier 进行代码格式化。
不光是美观,在 vscode 内如果使用 standard 进行代码规范,只能使用 ctrl + s,而不能使用 alt + shift + f ,这就导致很多其他边界情况无法格式化。
而当使用 prettier 时,alt + shift + f 使用了 prettier 插件按 .prettierrc
配置进行格式化,同时 ctrl + s 也会依据 prettier 配置进行格式化,是一致通用的。
希望以后不要自找麻烦使用 standard 或者其他 eslint 了,学习尤雨溪使用 prettier 不香吗