阅读 3089

[译]Vue 3:2020年中状态更新

前言

之前我翻译的[译]尤雨溪:Vue3的设计过程提到过:尤雨溪希望能在2020年的上半年发布Vue3.0,但眼看这都七月份了,2020年已经过半,许多人都跑去vue的issue问现在到底怎么回事了,是不是心思全放在开发vite上了?

对此,尤雨溪在vuejs/rfc里面开了个issue,特意来说明了vue现在的情况:

链接:github.com/vuejs/rfcs/…

译文

我们的许多用户都在问这个问题:Vue 3到底何时才能准备就绪?我们无法给出确切的答案,因为预估软件的交付时间本来就是不准确的。作为一个非营利性项目,我们希望专注于编写优秀的软件,而不是按时赶工期。但这确实是一个漫长的等待,而且我们知道这些不确定性会导致计划使用Vue 3的项目变得困难。所以我们想提供一些指导和详细的状态更新,以帮助我们的用户相应地调整他们的期望和计划。

在Vue 3上花费的大部分时间都花在了设计和构建内核上,这带来了许多令人兴奋的改进。但是,为了将整个框架标记为“已就绪”,它不仅仅涉及到Vue的核心部分。我们还需要具有兼容版本的支持库(Vue Router,Vuex,test utils),工具(CLI,eslint插件,浏览器devtool扩展,IDE扩展)和文档(适用于新用户和老用户迁移)。尽管我们一直在努力开发所有这些部分,但要使所有个各部分全都组合在一起需要付出大量的努力和协调,因此很难准确的预测时间表。我们最初希望在2020年上半年发布Vue 3,但考虑到目前的进展,我们必须重新对其进行调整。我们当前的目标是7月中旬发布RC版(候选版本),8月初发布3.0正式版。

决策树

但是,这并不意味着您不能现在就开始使用Vue 3。现在,大多数框架部分都处于beta或alpha状态,而vue的核心版本已经由我们的最初使用者进行了广泛的测试。阻止我们进入RC的唯一原因是浏览器devtools扩展(目前正在积极开发中)。所有重要的更改都已写在RFC中了,并且我们没有要重大更改的计划。如果您一直在等待使用Vue 3,以下是决策树,可帮助您进行相应的计划:

IWantVue3()

async function IWantVue3() {
  await read(`https://github.com/vuejs/rfcs/pulls?q=is%3Apr+is%3Amerged+label%3Acore+-label%3Arevoked+-label%3A2.6+sort%3Acomments-desc`)

  if (isTrue("I just want to play with Vue 3"))) {
    // If you just want to try Vue 3 out - you can do it right now with Vite.
    // Vite (https://github.com/vitejs/vite) is a new dev/build tool that we
    // created that is lighter, faster and produces smaller bundles. It works
    // with Vue 3 out of the box.
    run(`npm init vite-app hello-vue3`)
    return
  }

  if (isTrue("I am planning to use Vue 3 for a new project")) {
    if (isTrue("I need IE11 support")) {
      await IE11CompatBuild() // July 2020
    }
    if (isTrue("RFCs are too dense, I need an easy-to-read guide")) {
      await migrationGuide() // July 2020
    }
    if (isTrue("I'd rather wait until it's really ready") {
      await finalRelease() // Targeting early August 2020
    })
    run(`npm init vite-app hello-vue3`)
    return
  }

  if (isTrue("I am planning to upgrade an existing Vue 2 project")) {
    await IE11CompatBuild()
    await migrationGuide()
    await ecosystem(
      // this is the tricky part: if you have an existing, non-trivial Vue 2
      // app, you likely are using some dependencies that are not yet
      // Vue-3-compatible, for example meta frameworks like Nuxt, or UI
      // component libraries like Vuetify. If that's the case, our suggestion
      // is don't be in a hurry to upgrade. It *will* take some time for the
      // ecosystem to catch up.
      // Also note that you can start using Vue Composition API in Vue 2 today
      // via https://github.com/vuejs/composition-api - we are also going to be
      // backporting compatible Vue 3 features to 2.x once 3.0 is out.
    )
    return
  }

  if (isTrue("I am the author of a Vue ecosystem library")) {
    // It's time to make your lib Vue 3 compatible!
    return
  }
}
复制代码

框架目前的状态

Vue 3 Core

Vue 3 Core已经处于测试阶段两个多月了。我们已经合并了所有计划中的重大更改RFC,并且在正式3.0版本之前没有进一步的重大更改的计划。

成千上万的早期使用者已在新项目中使用过,并帮助我们修复了许多bug还帮我们发现了一些与Vue 2的不一致行为。在此阶段,我们认为Vue 3内核相当稳定,可以用于RC。

Vue Router

4.0版本的router hooks仍然存在一些轻微的与vue-router 3.x版本不一致行为,但这是唯一导致Vue Router标记为Beta的原因。该版本的Vue Router可用于非关键的新项目上。

Vuex

Vuex 4.0和3.x之间的唯一区别是它兼容Vue 3!并且已经准备与Vue 3一起进入RC阶段。

Vue CLI

当前可以通过vue-cli-plugin-vue-next来在Vue CLI中使用Vue 3。您可以搭建一个新项目,然后运行vue add vue-next去切换到Vue3。当达到RC时,Vue 3将成为项目创建过程中的一个选项。

请注意,如果您不是特别需要Webpack和兼容IE11,那么也可以使用Vite来启动Vue 3项目。

JSX支持

当前有两种针对Vue 3的JSX转换实现,其语法略有不同(针对Vue的特定功能):

我们正在用这个issue来收集大家的意见以确保设计的统一,并制定一个JSX中应如何处理Vue功能的正式规范。如果您将Vue与JSX一起使用,请在该issue中提供您的反馈。

其他项目

项目名状态
vue-devtoolsWIP(7月上旬支持Vue 3 beta)
eslint-plugin-vuev7.0.0-alpha.9 [GitHub地址]
@vue/test-utilsv2.0.0-alpha.7 [GitHub地址]
vue-class-componentv8.0.0-alpha.6 [GitHub地址]
vue-loaderv16.0.0-beta.4 [GitHub地址]
rollup-plugin-vuev6.0.0-beta.6 [GitHub地址]

往期精彩文章