VueConf China 2021 《Vue3生态进展-尤雨溪》 Reaction
“文章尽可能的以图文形式还原尤大的直播内容(为了你有更好的观看体验,欧巴添加了一些相关链接)。还没观看的同学可以和大家一起来一波图文 Reaction,看过的同学也可以再梳理一遍重点内容,废话少说,让我们开始吧!
”
![](https://filescdn.proginn.com/ef4f1c82747ae90f6a269966e8e5c433/72742662341e6fdc87c9222462414ecb.webp)
一些数据
![](https://filescdn.proginn.com/f412cd2680bede6c98e62b22ab5242f4/bdecf232fde103e100bd73c3a79b5224.webp)
![](https://filescdn.proginn.com/d31e7efc3e4bf50bbc23f306cdbd5c76/d8b63aabaf7a8ca42c687ef7d876476e.webp)
上面的数据是截止到今年 4 月份的,与去年同期相比,增长很可观,整个的前端开发市场还在不断扩大。
2020.09.18 发布 Vue 3.0 One Piece
![](https://filescdn.proginn.com/833f29cc7b6d4ff4939d04f1c1403424/d82a6ec24748d07f4ceae2c1f6d007df.webp)
Vue 3.0[1]
Vue3 发布后官方并没有强推所有的用户都升级 Vue3,因为生态需要时间,生态里的工具、周边以及库都需要时间去兼容,Vue3 的一些新用法也需要时间去沉淀。
发布后主要在忙什么?
![](https://filescdn.proginn.com/242cad22f3e53da28cf500a83b237097/d25563b1dcf23874518cbf4ecc63a746.webp)
Vue Router 4.0 已稳定
![](https://filescdn.proginn.com/062baaebc85c33485300ab4a768887d7/424f21027900d1a35bae8efde0528a79.webp)
github.com/posva[2]
Vuex 4.0 已稳定
![](https://filescdn.proginn.com/6d05d03a49d5f96c6b37ab0e5e8555dd/0d6e4b5ea5785160fa6e889305b771d8.webp)
github.com/kiaking[3]
(这位新加入的老哥,讲道理,豹纹有点帅。)
Vue Router 和 Vuex 早已经是 Vue 框架的一部分,它们的稳定是非常重要的。
Vue 3 生态逐步赶上
![](https://filescdn.proginn.com/09295972b420c440274c223e9d861b0b/25464ae38cc2a9a48f32f341527dd2a0.webp)
社区生态库也在逐步赶上。
Quasar[4] Element Plus[5] And Design Vue[6] Vuetify[7] Nuxt 3[8]
开发体验改进
![](https://filescdn.proginn.com/959ccfabc2fc35dd997b7757e8e020f6/68530c84e81f748e9754b359a80cb00a.webp)
构建工具 Vite
![](https://filescdn.proginn.com/64986a2b39667a42ea318afb747b1f95/c62f2beb3c4bf60a8907de4bc0c9672d.webp)
Vite 官方中文文档[9]
“该知道的都知道了,不知道的慢慢了解。-- 姜云升
”
![](https://filescdn.proginn.com/8375e5676ca5c4c90931a9654f2fc279/c0d5816fe1e4732443e785137aa2eed7.webp)
vue-cli 和 Vite 的主要区别
在于:vue-cli 基于 webpack 二次开发,vue-cli 涵盖的范畴比较广,维护成本非常高。一些常见的配置变得复杂化了。
Vite 会继承 vue-cli 的优点,选择更简洁的路线,插件机制基于 Rollup 的 API,非常简洁直观。比起 Webpack,Rollup 的插件会好写很多,更加容易理解。
Vite 插件还可以支持定制开发服务器、middleware 以及对热更新的行为做细致的调整。
Vite or vue-cli ?
![](https://filescdn.proginn.com/5c3a1c7fefa9a6c9e56ae6017461653c/5b4d1157d42fe225d59d54c375933e22.webp)
现有项目如果与 Webpack 强依赖,可能也没有办法简单的迁移过来。
VitePress 基于 Vue3 + Vite 的静态站生成器
![](https://filescdn.proginn.com/9f0c09c4a6df651a8a642cdeedfba8cb/a61be1165334612b4c173d600620b59d.webp)
可以理解为把 Vue2 换成了 Vue3,把 Webpack 换成了 Vite,就得到了 VitePress。
![](https://filescdn.proginn.com/5fdc98287a02965522cc924879581fa7/512b2feaea436bbe62b99ddf649d7d2e.webp)
上面的第三点,React 的 MDX 也有同样的问题,不过 VitePress 把它解决了。
更多单文件组件编译阶段的优化
![](https://filescdn.proginn.com/735e48adfd6da26533955cc2e734e32f/7dd1cd6a0d0a2f046cc96b40d61408e3.webp)
![](https://filescdn.proginn.com/b0b1239ab529c813f608cff442dde5c7/54ee1ab8f0b71203d4e5bde34f266c5d.webp)
New script setup (without ref sugar) [10]
只要你的 script 标签带了 setup 属性,那么你声明的变量就可以直接在模板里使用。
![](https://filescdn.proginn.com/346c4575ec6a8829deb181a61b722d7b/c46d3235c88579bcbdca4b0365fa6808.webp)
而且,setup 可以帮助我们简洁很多代码,提升编码体验。
比如我们有 Comp.vue 和 App.vue 两个组件。
在 setup 下,App 引入 Comp 组件后可以直接使用,无需注册。
![](https://filescdn.proginn.com/5f1f987ac18456d0ec219c3533650197/d683b9c2aa229546732b78b71e7be84d.webp)
![](https://filescdn.proginn.com/e3df88bfc01bff88e5ad2a50ee36cd21/f6f6835ebcfcb066b57169786ded3c1e.webp)
对比一下:
![](https://filescdn.proginn.com/0d69cda8326204c2b4591538069b65fe/91dac2c637b22df26428c7ac6908778d.webp)
<style>
动态变量注入
SFC style CSS variable injection (new edition)[11]
![](https://filescdn.proginn.com/a99af33b21d6ec5374af54c952bbc30e/f5a451e7a9170aaa07da4d0a05c07585.webp)
![](https://filescdn.proginn.com/185e58aa2a73519bace3ccb71298a9ce/b94b8ed6a3176656648bcc511556f7bb.webp)
点击 make it green 按钮后:
![](https://filescdn.proginn.com/4191b7d375c81a0ec3bd3d545a3616ae/3a6a6b28c4b02010a843e82b21257d32.webp)
原理也很简单,使用原生 CSS 变量,将动态内容进行绑定,剩下就全部交给浏览器去做,所以运行时开销非常小。是个性价比很高的特性。
![](https://filescdn.proginn.com/5f6d5f95a0f55c598a93e1ee84804c8f/8dbfbadf10d506751943da6e3f0a5aab.webp)
Vue Devtools beta channel(6.0)
![](https://filescdn.proginn.com/95500021a446ce00cf97148f928cf054/4942a32538f11ba9fef279334f8b1da1.webp)
不用在 Vue Devtools 两个版本之间来回切换了,新的 Vue Devtools 同时支持 Vue2/3。
![](https://filescdn.proginn.com/26e4ec8efbee5ab4572a604dfebd758d/e23e02905a279e50d5d46f50f3b6f0ed.webp)
这张图是开发时的截图,有些模糊,不过没关系。大致我们可以从图中看出:
性能调试面板可以帮我们找出哪个组件渲染特别慢,还有鼠标事件、键盘事件、组件事件、组件重渲染等。
最关键的是这个 Timeline 支持第三方插件对其进行扩展。
更好的 IDE/TS 支持
![](https://filescdn.proginn.com/5573bb3a4e8a2f4de618e9e3fd8514fc/431580e7740c5755af1e56f95b74ba61.webp)
Volar[12] 是未来官方主推的 VS Code 插件,将会替代 Vetur(历史包袱)。
如上图,Volar 提供了几乎和 TSX 一样的开发体验,可以进行模板类型检查。
IDE 支持计划
![](https://filescdn.proginn.com/24c390c8623ae1985a5fd37abe8b9b0d/bac0ba8f3635df4f6255af9cfedbbf32.webp)
未来会将 Vetur 的一些重要的功能以及一些新的探索整合到 Volar 上。
同时 Volar 的作者还开发了 vue-tsc,在 CI 上支持可以同时检查 TS 文件以及 Vue 文件里的 TS 类型错误,内部的实现适合 Volar 一样的。
当然,也会和其他的编辑器进行官方合作,提供支持。
不再支持 IE11
![](https://filescdn.proginn.com/fd1843a8f6835e91ce39505bc52f8756/2830f9aa2ebafb4f687e271a106cf619.webp)
微软刚刚发布声明,IE11 将在 2022 年 6 月 retire,可见其推动 IE 用户改用 Edge 的决心。
Proposal for dropping ie11 support in Vue 3[13] Drop IE11 support plan for Vue 3[14]
Vue3 + Vite = Modern by Default
![](https://filescdn.proginn.com/48592ce1094ddf0224ad04bb64206aea/9a710a0f5242a7b4c8cc32b479e45b9a.webp)
Vue3 migration build
![](https://filescdn.proginn.com/85fe632c0bac2de2ebf9f192c3f85442/bfb78e01e79556ecab5522641b82c3f0.webp)
近期另一个重大发布,整体的内容比较大,预计在 3.1 发布。
Vue3 升级版:底子里是 Vue3,上层兼容 Vue2 的行为。大部分的功能都可以完全支持。
可以选择将整个应用可以跑在 Vue2 模式下,再将某几个单独的组件跑在 Vue3 模式下。
也可以反过来,整个应用跑在 Vue3 模式下,再将几个旧的 Vue2 组件移植过来,再慢慢的更改成 Vue3 的模式。
尽可能的给大家提供了兼容的灵活性。
目前文档在vue-compat[15]仓库里。public API 会尽可能的兼容,但是一些私有 API 确实没有办法完全兼容。文档中有详细的支持列表。
并提供了详尽的 step by step 的流程vue-hackernews-2.0[16]
3.2
![](https://filescdn.proginn.com/9b3e40d1199556f4dfa06560a690128d/4d4b11748457a3c1e9388e278216c2c6.webp)
因为上面的兼容版移到了 3.1,所以原有的 3.1 内容将会移到 3.2,不过预计也会很快发布,具体的细节会在发布时披露。
绝对需要 IE11 支持的话 请等待 2.7
![](https://filescdn.proginn.com/518a596046dbfb07af285922f1e1dde5/76dcbdf31787294bd22a4bf29d42b201.webp)
预计在 Q3 2021 去做。
![](https://filescdn.proginn.com/b3ab10b835cd6e818dfe87cb027f85e4/722c6b723a93a825d3448c66706eef7c.webp)
希望在 Q3 Vue2.7 发布之后,整个的 Vue2 到 Vue3 的升级过程会变得更加顺滑。可以先基于 Vite 切换到 Vue2.7,Compsition API 会直接内置,再切换到 Vue3 会更加简单。
Vue3 成为默认版本 by end of Q2 2021
![](https://filescdn.proginn.com/b849fcd45a2dceb89ef7d58b9f9fd97d/4c4b408a8826d79f346b233563358c19.webp)
将会在 2021 年 6 月底,将 npm 默认安装指向 Vue3,文档也会默认指向 Vue3 的文档,希望新的用户会以 Vue3 作为基准。
![](https://filescdn.proginn.com/fb1b6aa6b3815ff52e8609134de16728/fca1f281fe2dfbcce947f9ac22f5dbc1.webp)
“本文已收录在前端食堂同名仓库 Github github.com/Geekhyt[17],欢迎光临食堂,如果觉得酒菜还算可口,赏个 Star 对食堂老板来说是莫大的鼓励。
”
参考资料
Vue 3.0: https://github.com/vuejs/vue-next/releases/tag/v3.0.0
[2]github.com/posva: https://github.com/posva
[3]github.com/kiaking: https://github.com/kiaking
[4]Quasar: https://github.com/quasarframework/quasar
[5]Element Plus: https://github.com/element-plus/element-plus
[6]And Design Vue: https://github.com/vueComponent/ant-design-vue
[7]Vuetify: https://github.com/vuetifyjs/vuetify
[8]Nuxt 3: https://github.com/nuxt/nuxt.js
[9]Vite 官方中文文档: https://cn.vitejs.dev/
[10]New script setup (without ref sugar) : https://github.com/vuejs/rfcs/pull/227
[11]SFC style CSS variable injection (new edition): https://github.com/vuejs/rfcs/pull/231
[12]Volar: https://github.com/johnsoncodehk/volar
[13]Proposal for dropping ie11 support in Vue 3: https://github.com/vuejs/rfcs/discussions/296#discussioncomment-707086
[14]Drop IE11 support plan for Vue 3: https://github.com/vuejs/rfcs/blob/master/active-rfcs/0038-vue3-ie11-support.md
[15]vue-compat: https://github.com/vuejs/vue-next/tree/master/packages/vue-compat
[16]vue-hackernews-2.0: https://github.com/vuejs/vue-hackernews-2.0/compare/migration
[17]github.com/Geekhyt: https://github.com/Geekhyt/front-end-canteen
如果你觉得这篇内容对你挺有启发,我想邀请你帮我三个小忙:
点个「在看」,让更多的人也能看到这篇内容(喜欢不点在看,都是耍流氓 -_-) 欢迎加我微信「TH0000666」一起交流学习... 关注公众号「前端Sharing」,持续为你推送精选好文。