大家好,我是编程小6,很高兴遇见你,有问题可以及时留言哦。
随着vscode
以及vue
的越来越普及,vetur
这个名字也越来越被人熟知。
vetur
是一个vscode
插件,用于为.vue
单文件组件提供代码高亮以及语法支持。
可是由于众所周知的原因,vue
以及vetur
对于ts
的支持,并不友好。在@vue/composition-api
这个插件 出来之前,vue
2的ts
需要使用vue-prototype-decorator
这个插件,来通过装饰器的模式进行模拟,但是由于不是从底层支持,因此vue
2的ts
使用体验可谓是一塌糊涂。
在2020年9月18日,vue3
- one piece
正式发布。随之而来的,是一整套从头到尾使用ts
的新底层以及全新的composition-api
。与此同时,volar
顺应而生。
Volar
是什么与vetur
相同,volar
是一个针对vue
的vscode
插件,不过与vetur
不同的是,volar
提供了更为强大的功能,让人直呼卧槽
。
安装的方式很简单,直接在vscode
的插件市场搜索volar
,然后点击安装就可以了。
现在只有16000多的下载,我觉得是一方面是
vetur
已经很强大了,另一方面,则是众多开发者并不知道volar
这个东西。
Volar
的功能重头戏来了!
Volar
作为vue的二代插件,除了集成了vetur
的相关功能,如高亮
、语法提示
等之外,更让我关注的,是它独有的功能。
某些功能现在还没发布,不过可以通过在
github
下载源码,来抢先体验新功能
学过vue
语法的应该都知道,在vue
的template
中,需要一个唯一的根标签,这是vue
决定的,但是在vue
3中,去除了这个限制,只要在template
中,可以使用多个根标签,不再需要考虑因为唯一根标签所引起的问题。
说实话这不是
volar
的新功能,是vue3
的,只不过使用volar
之后不会报错了。
vue
单文件组件,按照功能,存在template
、script
、style
三个根元素。
就像常规的html
文件,在单一文件内功能太多,容易造成文件冗余。一个数据稍微多点的vue
页面,就可能有两三千行代码。随之带来的,就是各种不方便:找数据不方便、上下文切换不方便、开发不方便,等等等等。
为了解决这些问题,volar
提供了一个快捷方式。
在安装好volar
之后,进入.vue
单文件组件,会发现右上角多了一个图标
然后我们在页面中写入template
、script
、style
根元素,点击一下这个图标
令人激动的事情发生了,我们的vue
文件,按照功能,被拆分成了三个视窗,并且每个视窗都负责自己的功能,其他的两个根元素都被合并了。
也就是说,我们可以非常容易的进行区分开template
、script
、style
了,把一个文件拆成三个窗口,当三个文件来用,而且全部由插件来帮你完成,我们只需要点一下即可。
不得不说,我特别喜欢这个功能。
这个功能现在的
volar
已经有了,只要你在vscode
插件中心下载就可以使用了。接下来的几个功能,是我在volar
源代码中找到的,都是惊喜。
ref sugar
语法快捷改动支持ref sugar
是一个还在rfc
阶段的功能,但是已经持续很久了,现在的vue3
版本已经可以尝鲜使用了。具体的用法以及语法我就不展开赘述了,我主要说一下volar
和ref sugar
的结合。
报错不用管,是
eslint-plugin-vue
的原因
可以看到,在使用了ref sugar
之后,script
上面出现了一个ref sugar
的小图标,并且打了个对勾,那么我们点一下那个对勾,看看会发生什么。
可以看到,我们点击这个小对勾之后,它由原本的ref sugar
语法变为了普通的script setup
模式。
惊不惊喜,意不意外。
style
里面的class
引用可以看到,在.foo
这个类名上面,出现了一个1 reference
的小图标,代表着当前class
有一次引用,我们点击一下这个1 reference
出现了一个弹窗,里面是当前class
的具体使用位置。
class
追溯我们创建一个template
根元素,在里面写入
<template>
<div class="foo"></div>
</template>
在style
中写入
<style scoped>
.foo {}
</style>
除了style
中的.foo
上面会出现1 reference
的小图标之外,在class="foo"
的foo
下面,会出现一道横线。
对于经常使用vscode
的开发人员来说,这代表什么意义就不必多说了。
我们根据提示,按住command
然后点击,会发现光标自己移动到了style
中的.foo
之前。
哇,awesome!
css module
类型提示css module
一般是react
技术栈用的会比较多一些,就我个人来说,是从没在vue
里面使用它的,因为vue
提供了scoped
作用域,不用担心样式冲突,直接使用预处理器会更加简单方便。
我们创建如下代码
<template>
<div :class="$style.foo"></div>
</template>
<style module>
.foo { }
</style>
然后将鼠标移动到$style
上
有点意思,看来vscode
是让volar
玩明白了。
lang
语法提示vue
可以使用lang
属性来选择使用的语言,比如template
中的html
和pug
,script
中的ts
,style
中的scss
等。
但是在以前,我们都是手动输入的,编辑器,或者说vetur
并没有给我们提供任何提示,有可能你找了很久的莫名其妙的问题,就是因为lang
写错了。
但是这一切,在有了volar
之后,都不同了
现在我们在使用lang
进行选择预处理器的时候,volar
为我们提供了明确的提示,告知我们可以使用哪几种语言来进行编写。
template
语法转换vue
默认提供了两种模板供我们使用,但是一般都会使用html
,另外一种叫做pug
。
相对于html
,pug
更偏向于yml
那种,简洁程度特别高。
在volar
中,为我们提供了html
和pug
互相转换的功能。
<template>
<div>
<li></li>
<li></li>
<li>
<img />
</li>
</div>
</template>
在我们书写template
之后,template
顶部会出现一个小小的pug
图标,我们可以看到此时它是没有被选中的
这个时候我们点击一下这个图标,让它选中。
神奇的事情发生了。
我们写好的html
模板,被自动转化成了pug
,再点击一下,又回到了我们熟悉的html
从功能三开始,基本都是算内测的新功能,我是机缘巧合之下,将
volar
下到本地进行查看的时候发现的这些。想尝鲜的可以自己下载源码,然后在packages/vscode-vue-languageservice/testCases
目录下体验。
希望这些功能可以尽快发布!