网上有一大堆关于格式化vue
代码的方法,但基本都配合使用了prettier
格式化插件,相信捣鼓过的同学肯定会跟我一样都有一种感受:杂乱!
prettier
插件在使用的时候需要与eslint
配合使用,两者在一起使用的话不仅会产生冲突(你需要额外在prettier
规则配置里配置上和eslint
一样的规则),而且两者功能重叠(两者在一起工作的原理也是在eslint --fix
以后再用prettier
去格式化代码)。eslint --fix
已经能帮你格式化出一套漂亮的vue代码,再用prettier
就显得多此一举。
其实,要想统一并写出一手漂亮的vue
代码,最简单直接的办法就是按照vue
官方提供的vue风格指南,配合官方提供的配套的校验插件 eslint-plugin-vue,再在VSCode
中安装vetur
和eslint
插件即可。
1. Vetur
vetur 是vue
官方提供的支持vue
编写风格的VSCode
插件。具体的安装很简单,这里我就介绍几个vetur
常用的功能:
vue 代码高亮
支持多种语言,包括但不局限于ts
、coffee
。
快速生成代码片段
当你新建一个vue
文件时,你可以通过输入<vue
快速生成如下代码:
<template>
</template>
<script>
export default {
}
</script>
<style>
</style>
或者通过输入<template
、<script
、<style
,生成相应的html
、script
、style
代码。
vetur
还提供了更强大的配置自定义模板的功能,只需要在<WORKSPACE>/.vscode/vetur/snippets
目录中新建.vue
文件,然后重启vscode
就能使用这些代码片段。具体用法可以参考customizable-scaffold-snippets。
使用缩写语法快速编写 html、css 等
vetur
集成了 emmet
插件,比如输入div.a
回车就变成<div class="a"></div>
。emmet
还有很多功能,想要了解更多的同学可以上emmet
官网逛逛。
静态检查代码错误
能够静态的检测template
、script
、style
中的语法错误。
格式化代码
vetur
官方建议配合prettier
来进行代码格式化,但本文并不采取prettier
来进行代码的格式化,有兴趣的同学可以去浏览vetur
官网。
智能提示
vetur
集成了vue
的语法,所以当你在编写一些vue
具有的指令、事件或者生命周期等一切属于vue
的语法时,都会对你进行智能化的提示,从而让你快速的编写出vue代码。
框架支持
vetur
还对一些框架有支持,比如vue-router
、element-ui
等,能给这些框架提供自动补全属性的功能。
2. VSCode 中的 eslint
VSCode
中的eslint
插件将使用安装在当前打开的工作区文件夹中的eslint
库,也就是会读取你当前项目的eslint
配置信息。如果你的eslint
配置是写在.eslintrc.js
文件中,则VSCode
中的eslint
插件将会读取.eslintrc.js
文件的配置信息来对你的代码做静态分析,并标记出不符合规范的代码片段。
安装完eslint
插件以后,我们只需要在VSCode
配置中设置保存自动修复即可:
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
3. 代码中的 eslint
代码中不仅需要js
的eslint
还需要vue
的eslint
。
安装
npm install --save-dev eslint eslint-plugin-vue
eslint-plugin-vue
这个插件的作用是能用eslint
按照官方提供的风格指南来校验.vue
文件的template
和script
里的代码。eslint-plugin-vue
提供了一系列的规则供开发者们参考。
配置
根目录下新建.eslintrc.js
文件,并写入:
module.exports = {
extends: [
// add more generic rulesets here, such as:
'plugin:vue/essential',
'@vue/standard'
]
}
如果同一个目录下有多个配置文件,eslint
只会使用一个。优先级顺序如下:
.eslintrc.js
.eslintrc.yaml
.eslintrc.yml
.eslintrc.json
.eslintrc
package.json
遇到项目内有多个层叠配置时,依然采用就近原则作为高优先级。
配合第二步,VSCode
就可以按照vue
风格指南对.vue
文件的script
片段进行eslint
和vue
风格指南静态校验。
虽然script
片段统一了风格,但是每个人写template
的风格也不一样,如果还想约束并校验template
的风格,则将上述的配置修改为:
module.exports = {
extends: [
// add more generic rulesets here, such as:
'plugin:vue/essential',
'@vue/standard'
]
}
当你修改保存时,VSCode
就会对你代码里的template
和script
里的代码进行eslint
自动修复。
这里推荐几个笔者觉得相比较vue
官方可能让开发更舒适的几个规则:
module.exports = {
rules: {
'vue/html-self-closing': [ // 自定义组件校验自闭和,常规的html不校验
2,
{
html: {
normal: "never",
void: "always"
}
}
],
'vue/singleline-html-element-content-newline': 0, // 不要求标签中的内容另起一行
'vue/no-unused-components': 1, // 警告引入但没有使用的组件
'vue/max-attributes-per-line': [ // 模板标签属性大于4个才换行
2,
{
singleline: 4,
multiline: {
max: 1,
allowFirstLine: false
}
}
],
'vue/attribute-hyphenation': 2, // 要求模板中使用短横线命令来访问 props
'vue/this-in-template': ['error', 'never'], // 禁止在template中使用this访问属性
'vue/no-side-effects-in-computed-properties': 0 // 允许在计算属性中对属性进行修改
}
}
附上eslint
的启用规则:
off
或0
- 关闭规则warn
或1
- 开启规则,使用警告级别的错误:warn
(不会导致程序退出)error
或2
- 开启规则,使用错误级别的错误:error
(当被触发的时候,程序会退出)
4. VSCode 中的 stylelint
同VSCode
中的eslint
一样,stylelint
也将会按照你工作区中的stylelint
配置文件对代码中的样式做静态检查,并标记不符合规范的代码片段。
安装完stylelint
插件以后,我们只需要在VSCode
配置中设置保存自动修复即可:
"editor.codeActionsOnSave": {
"source.fixAll.stylelint": true
}
5. 代码中的 stylelint
安装
npm install -D stylelint stylelint-standard stylelint-scss
配置
根目录下新建.stylelintrc.js
文件,并写入:
module.exports = {
'extends': [
// add more generic rulesets here, such as:
'stylelint-config-standard',
"stylelint-config-recommended-scss"
],
plugin: ['stylelint-scss']
rules: {
"indentation": 2, // 缩进设为2
"selector-pseudo-element-no-unknown": [ // 忽略对::v-deep的校验
true,
{
"ignorePseudoElements": ["v-deep"]
}
]
}
}
最后
本文的目的也是为了让用VSCode
开发Vue
的同学们不再被其他的插件(Prettier
)搞得乱七八糟,只需要eslint
和stylelint
,不需要下载额外的格式化插件,也不需要额外的繁琐的配置,按照上述几步,就能很轻松的格式化出一套统一标准的Vue
代码。