目录

译文:Vue.js 3.0 开发计划

英文原文 (需翻墙

作者尤雨溪,以下是译文


在上周的 Vue.js 伦敦会议上我简短地透露了下个版本的 Vue 的新特性。这篇文章讲深入地阐述 Vue 下个版本的计划。

为什么要升级到 3.0?

两年前的今天 Vue 2.0 发布了(时间过得真快!)。这两年里,Vue 更新了五次小版本,这些更新都是向后兼容的。Vue 的开发团队已经了很多不错的想法,但是为了兼容性,我们一直没有把这些想法加到 2.x 里。与此同时,JS 的生态系统和语言本身却在飞速发展。已经有一些非常不错的工具能提高我们的工作效率,而且一些新的语言特性能更快更好地解决 Vue 2.0 面对的问题。更令人惊喜的是,几乎所有现代浏览器都已经支持 ES2015 了。Vue 3.0 的目的是利用这些新的语言特性,让 Vue 核心部分变得更轻便、更高效、更强大。

Vue 3.0 目前还处于原型阶段,我们已经实现了一个与 Vue 2.x 功能很接近的运行时(runtime)。下文将要说到的很多功能要么已经被实现了,要么将要被实现。没有被实现的特性和还在探索阶段的特性将被标记一个 * 号。

更新详情

上层 API 变化

简述:除了 render 函数和 scoped-slots 语法之外,所有的 API 都会保持不变或者保持与 Vue 2.0 兼容(通过构建工具做到)。

由于这是一个新的版本,所以还是会有一些不兼容的地方(breaking change)。不过我们有在认真对待向后兼容性,所以我们想要尽早告知这些变化。以下是 API 变化列表:

代码架构

简述:内部模块更解耦,使用了 TypeScript,给 Vue 贡献代码变得更容易。

3.0 版本的代码是从零开始的,所以代码的架构会更简明、更具可维护性,我们特意为大家给 Vue 贡献代码提供了便利。为了降低代码的复杂度,一些内部功能被放到单独的 package 里面了。举个例子,观察者(observer)模块连同它的 API 和测试用例,被放在一个单独的 package 里了。注意 Vue 的使用者并不需要一一导入这些单独的 package,因为 Vue 3.0 将会把这些 package 整合起来。

目前的代码库是用 TypeScript 编写的。所以想要给 Vue 贡献代码就要提前掌握 TypeScript,但是我们觉得类型信息和 IDE 提供的便利对于代码贡献者而言利大于弊。

将观察者和调度器(scheduler)放到单独的 package 里也有利于我们去对比不同的实现之间的差异。比如,我们可以为 IE 11 单独实现一个观察者,其暴露的 API 可以保持不变。再比如,我们还可以基于 requestIdleCallback 写一个新的调度器。*

新的代码架构(可能有变)

观察机制

简述:更完备、更精准、更高效,可以对响应式跟踪进行调试,新增了一个创建可观察对象(observable)的 API。

3.0 版本里将有一个基于 Proxy 的观察者,它会提供全语言覆盖的响应式跟踪。相比于 2.x 版本里基于 Object.defineProperty 的观察者,新的实现更加强大:

新的观察者还有以下特点:

很容易知道为什么一个组件会重新渲染

其他的运行时增强

简述:体积更小、速度更快,支持 tree-shaking,支持 fragment 和 portal,支持自定义 render。

编译器增强

简述:编译出的内容对 tree-shaking 友好,更多 AOT 优化,更好的错误提示,对 source map 的支持更好。

支持 IE 11*

简述:Vue 3.0 支持 IE 11,但是需要单独构建,而且其观察者的实现和 Vue 2.x 一样。

新的代码库目前只支持现代浏览器(evergreen),且默认使用 ES2015 语法。但是啊,我们知道很多开发者还是需要兼容 IE 11 一段时间。大部分 ES 2015 语法都可以通过转译和 polyfill 运行在 IE 11 上,除了 Proxy。我们的计划是用 Object.defineProperty 单独给 IE 11 实现一个提供相同 API 的观察者。Vue 3.x 会基于这个观察者再发布一个版本。但是,这个版本跟 Vue 2.x 一样存在一些限制,所以跟 3.x 并不完全兼容。我们知道这会给一些库的开发者带来不便,因为库的开发者需要清楚这两种不同的构建版本,所以我们保证届时会给大家提供清晰的文档。

如何达成 Vue 3.0

首先,尽管我们今天就宣布了 Vue 3.0 的计划,但是我们并没有一个明确的日程。为了顺利完成 Vue 3.0 的开发,我们会按如下步骤来做:

1、对运行时的原型做内部讨论

目前我们处于这个阶段。我们已经做出了一个可以使用的运行时原型,包括新的观察者、新的虚拟 DOM 和新的组件实现。我们已经邀请了一些有影响力的项目的开发者来提供反馈,希望新的变更对他们来说体验良好。我们想确保在 3.0 版本发布的时候,JS 生态中那些重要的库都已经做好了准备,这样一来大家就可以愉快地把自己的项目升级到 3.0 了。

2、 通过 RFC 公开收集反馈

一旦我们对新的设计有了足够的自信,对于每一个 breaking change 我们都会开启一个专门的 RFC issue,内容包括:

我们将参与社区的讨论,以便我们更好地达成以上目标。

3、为 2.x 版本引入新的特性

我们不会弃 2.x 版本不顾的!实际上,我们打算在 2.x 版本中引导开发者逐渐了解这些新特性。我们会逐渐向 2.x 版本引入一些新 API,之后的 2.x 版本将允许开发者尝试接入基于 Proxy 的观察者。

最近的一个 2.x 版本将会变为长期支持版本(LTS),在接下来的一年半里我们会继续解决这个版本的 bug 和安全性问题。

4、内测(Alpha)阶段

然后,我们将会完成 3.0 版本的编译器和服务端渲染,并发布内测版本,主要是在小型的新应用上面测试 Vue 3.0 的稳定性。

5、公测(Beta)阶段

在公测阶段,我们的主要目的是帮助 Vue 周边库的升级,比如 Vue Router、Vuex、Vue CLI 和 Vue DevTools,以确保它们能完全支持 Vue 3.0。我们也会进一步帮助社区中其他的库升级。

6、发布候选(RC)阶段

一旦我们认为 API 和代码库已经足够稳定了,我们就会冻结 API 并进入发布候选阶段。在这个阶段我们会考虑推出一个兼容版本:一个支持 2.x 版本的 API 的 3.0 版本。如果你的应用使用的是 2.x 版本的 API,这个版本就会给出警告提示,你可以在编译的时候关闭这个提示。这个兼容版本可以作为你的升级向导。

7、IE 11 版本

最后我们会推出兼容 IE 11 的 3.0 版本。

8、最终发布

说实话我们也不知道什么时候最终发布,可能是 2019 年。再次声明,比起确定一个最终发布日期,我们更在意 3.0 版本的健壮性和稳定性。我们还有很多工作要做,不过我们对 Vue 3.0 充满了期待。


正文结束。

如果你在学习 Vue, 加我微信吧 frank_fang

饥人谷一直致力于培养有灵魂的编程者,打造专业有爱的国内前端技术圈子。如造梦师一般帮助近千名不甘寂寞的追梦人把编程梦变为现实,他们以饥人谷为起点,足迹遍布包括facebook、阿里巴巴、百度、网易、京东、今日头条、大众美团、饿了么、ofo在内的国内外大小企业。 了解培训课程:加微信 xiedaimala03,官网:https://jirengu.com

本文作者:饥人谷方应杭老师