Vue 3.0 正式發布了!

2021-02-20 程序猿

Vue 團隊於 2020 年 9 月 18 日晚 11 點半發布了 Vue 3.0 版本,我們連夜對 Release 進行了翻譯。由於時間倉促,文中如有翻譯不當的地方還望提出。如有侵權,請聯繫刪帖。以下為譯文正文。

今天,我們非常自豪地宣布 Vue.js 3.0 "One Piece" 發布。本次主版本更新包含性能的改進,更小的 bundle 體積,對 TypeScript 更好的支持,用於處理大規模用例的全新 API,以及為框架未來的長期迭代奠定了夯實的基礎。

3.0 的發布意味著兩年多以來的努力,其中包含 30+ RFC[1],2600+ commits,99 位貢獻者[2]所提交的 628 個 PR[3],還有許多除核心倉庫以外的開發及文檔編寫工作。在此對 Vue 團隊成員表示最深切的感謝,感謝貢獻者們提交的 PR,感謝贊助商和 sponsors[4] 的資金支持,感謝廣大社區成員參與預發布版本的設計與談論,並提供反饋。Vue 是一個獨立項目,為社區建立,也由社區維護,沒有大家的鼎立支持,Vue 3.0 是不可能實現的。

進一步推進 "漸進式框架" 概念

Vue 從開始就有一個簡單的使命:成為任何人都能快速學習且平易近人的框架。隨著我們用戶群體的增長,框架的應用範圍也在不斷擴大,以適應不斷迭代的需求。隨著時間的流逝,它演變成了 "漸進式框架":一個可以逐步學習和採用的框架,同時為用戶提供持續支持,以應對越來越多的苛刻場景。

時至今日,我們在全球擁有 130 多萬的用戶,我們看到 Vue 被應用於各種不同的場景中的可能,從在傳統的服務端渲染頁面之上添加交互,到擁有數百個組件的完整單頁應用。Vue 3.0 將這種靈活性進一步提升。

分離內部模塊

Vue 3.0 核心仍然通過一個簡單的 <script> 標籤來使用,但其內部結構已經被重寫,並解耦成一個個模塊的集合[5]。新的架構下為源碼提供了更好的可維護性,並允許終端用戶通過 tree-shaking 的形式將減少一半的運行時體積。

這些模塊還暴露了底層 API,解鎖了許多高級用法:

編譯器支持自定義 AST 轉換,用於在構建時自定義(如,在構建時進行 i18n 操作[6])核心運行時提供了一系列 API,用於針對不同渲染目標(如 native moile[7]、WebGL[8] 或終端[9])的自定義容器。默認的 DOM 渲染器也使用這系列 API 構建。`@vue/reactivity` 模塊[10]導出的功能,可以直接訪問 Vue 的響應式系統。並且可以作為一個獨立的包進行使用。它可以與其他模塊解決方案配對使用(如 lit-html[11]),甚至是在非 UI 場景中使用。用於解決規模問題的全新 API

在 Vue 3.0 中,基於對象的 2.x API 基本沒有變化,並引入了 Composition API[12] — 一套全新的 API,旨在解決 Vue 在大規模應用場景中的痛點。Composition API 構建於響應式 API 之上,實現了類似於 React hook 的邏輯組成與復用,相較於 2.x 基於對象的 API 方式來說,擁有更加靈活的代碼組織模式,以及更為可靠的類型推斷能力。

Composition API 同時還提供了適用於 Vue 2.x 的版本,可通過 `@vue/composition-api`[13] 插件來在項目中使用,目前已有適用於 Vue 2 和 Vue 3 的 Composition API 實用的工具庫(如 `vueuse`[14],`vue-composable`[15])。

性能提升

Vue 3 與 Vue 2 相比,在 bundle 包大小方面(tree-shaking 減少了 41% 的體積),初始渲染速度方面(快了 55%),更新速度方面(快了 133%)以及內存佔用方面(減少了 54%)都有著顯著的性能提升[16]。

在 3.0 中,我們採取了 「編譯信息虛擬 DOM」 的方式:針對模板編譯器進行了優化,並生成渲染函數代碼,以提升靜態內容的渲染性能,為綁定類型留下運行時提示,最為重要的是,模板內部的動態節點進行了扁平化處理,以減少運行時遍歷的開銷。因此,用戶可以獲得兩全其美的效果,從模板中獲得編譯器優化後的性能,或在需要時通過手動渲染函數直接控制。

改進與 TypeScript 的兼容

Vue 3 的代碼庫完全採用 TypeScript 編寫,自動生成、測試並構建類型聲明,因此它們總為最新。Composition API 可以很好的進行類型推斷。Vetur,官方推出的 VSCode 插件,現已支持對模板表達式和 props 的類型檢查,同時,Vue 3 已全面支持 TSX[17]。

實驗特性

我們為單文件組件提出了兩個新特性[18](SFC,又稱為 .vue 文件):

<script setup>:在 SFC 內使用 Composition API 的語法糖<style vars>:在 SFC 中支持將狀態作為 CSS 變量注入到樣式中

這些特性在 3.0 中均已實現且可用,但提供這些特性的目的只是為了收集反饋。在最終合併到 RFC 之前,這些特性仍是實驗性的。

我們還實現了一個目前尚未編寫文檔的 <Suspense> 組件,它允許在初始渲染或 branch 切換時,等待嵌套的異步依賴(異步組件或帶有 async setup() 組件)。我們正在與 Nuxt.js 團隊一起測試和迭代此功能(Nuxt 3 正在開發中[19]),並可能會在 3.1 時完善它。

分階段發布

Vue 3.0 的發布意味著本框架的整體準備就緒。雖然框架的一些子項目還需進一步完善才能達到穩定狀態(特別是 router 以及 Vuex 與 devtools 的集成),但我們相信現在已經可以使用 Vue 3 開啟全新的項目。同時,我們也鼓勵庫作者開始升級項目以支持 Vue 3。

查閱 Vue 3 的庫指南[20],以了解框架所有子項目的詳細進展。

遷移與 IE11 的支持

由於時間限制,我們推遲了遷移構建(v3 兼容 v2 的構建,以及遷移警告)和兼容 IE11 的計劃,並打算在 2020 年 Q4 集中進行。因此,計劃遷移現有 v2 應用或需要兼容 IE11 的用戶,目前應注意限制。

下一階段工作

對於發布後的一段時間內,我們將重點關注:

Router 以及 Vuex 與 devtools 的集成

目前,Vue 3 及其相關子項目的文檔站、github 分支以及 npm 的 dist 標籤都將保持在 next 狀態。這意味著 npm install vue 仍會安裝 2.x 版本,而通過 npm install vue@next 將會安裝 v3 版本。我們計劃在 2020 年底之前將所有文檔連結,分支以及 npm 標籤全部切為 3.0。

與此同時,我們已開始規劃 2.7 版本,這將會是 2.x 的最後一個小版本。2.7 將與 v3 進行兼容改進,並對使用 v3 中已刪除/更改的 API 發出警告,以更好的幫助 3.0 的遷移升級工作。我們計劃在 2021 年 Q1 進行 2.7 的工作,發布後將直接成為 LTS 版本,維護周期為 18 個月。

試用

欲了解更多關於 Vue 3.0 的信息,請查閱全新的文檔站[21],如果你是 2.x 的老用戶,請直接查看遷移指南章節[22]。

參考資料[1]

30+ RFC: https://github.com/vuejs/rfcs/tree/master/active-rfcs

[2]

99 位貢獻者: https://github.com/vuejs/vue-next/graphs/contributors

[3]

628 個 PR: https://github.com/vuejs/vue-next/pulls?q=is%3Apr+is%3Amerged+-author%3Aapp%2Fdependabot-preview++sort%3Aupdated-desc

[4]

贊助商和 sponsors: https://github.com/vuejs/vue/blob/dev/BACKERS.md

[5]

解耦成一個個模塊的集合: https://github.com/vuejs/vue-next/tree/master/packages

[6]

在構建時進行 i18n 操作: https://github.com/intlify/vue-i18n-extensions

[7]

native moile: https://github.com/rigor789/nativescript-vue-next

[8]

WebGL: https://github.com/Planning-nl/vugel

[9]

終端: https://github.com/ycmjason/vuminal

[10]

@vue/reactivity 模塊: https://github.com/vuejs/vue-next/tree/master/packages/reactivity

[11]

lit-html: https://github.com/yyx990803/vue-lit

[12]

Composition API: https://v3.vuejs.org/guide/composition-api-introduction.html

[13]

@vue/composition-api: https://github.com/vuejs/composition-api

[14]

vueuse: https://github.com/antfu/vueuse

[15]

vue-composable: https://github.com/pikax/vue-composable

[16]

顯著的性能提升: https://docs.google.com/spreadsheets/d/1VJFx-kQ4KjJmnpDXIEaig-cVAAJtpIGLZNbv3Lr4CR0/edit?usp=sharing

[17]

Vue 3 已全面支持 TSX: https://github.com/vuejs/vue-next/blob/master/test-dts/defineComponent.test-d.tsx

[18]

兩個新特性: https://github.com/vuejs/rfcs/pull/182

[19]

Nuxt 3 正在開發中: https://nuxtjs.slides.com/atinux/state-of-nuxt-2020

[20]

Vue 3 庫指南: https://v3.vuejs.org/guide/migration/introduction.html#supporting-libraries

[21]

全新的文檔站: https://v3.vuejs.org/

[22]

遷移指南章節: https://v3.vuejs.org/guide/migration/introduction.html

相關焦點

  • Vue Router 4.0 正式發布!
    今天,Vue Router 4 正式發布穩定版本。甚至專門有 Path Ranker[3] 這個網頁來幫助你計算路由的優先級得分。「發布地址:https://github.com/vuejs/vue-router-next/releases/tag/v4.0.0」參考資料[1]RFC:https://github.com/vuejs/rfcs/pulls?
  • Vue Router 4.0 正式發布!煥然一新.
    Vue Router 4 正式發布穩定版本。甚至專門有 Path Ranker[3] 這個網頁來幫助你計算路由的優先級得分。「發布地址:https://github.com/vuejs/vue-router-next/releases/tag/v4.0.0」參考資料[1]RFC:https://github.com/vuejs/rfcs/pulls?
  • Vue 3發布
    Vue.js 3.0 "One Piece" 已正式發布,此框架新的主要版本提供了更好的性能、更小的捆綁包體積、更好的 TypeScript 集成
  • Vue 3.0 正式版發布|全美今日下架微信和TikTok
    Vue 官方團隊於 2020 年 9 月 18 日晚 11 點半左右發布了Vue3.0版本 🎉。
  • Vue3.0--Vue Composition API使用體驗
    本文將之前採用Vue2.6開發的todoList小項目改造成為Vue3.0編寫,並介紹一下2.x和3.x之間寫法的不同之處。如何創建一個Vue3.0的項目首先,安裝vue cli的最新版本,一般是vue cli 4,安裝成功後,調用:vue create myapp創建一個基於Vue2.x的項目,然後進入項目的根目錄,執行:
  • Element UI for Vue 3.0 來了!
    第一個使用 TypeScript + Vue 3.0 Composition API 重構的組件庫 Element Plus 發布了 ~2016 年 3 月 13 日 Element 悄然誕生,經歷了 4 年的風雨洗禮,我們從一個餓了麼內部業務組件庫成長為 Vue 生態裡最流行的 UI
  • Vant 1.0 正式發布:輕量、可靠的移動端 Vue 組件庫
    一、關於 Vant 1.0距離 Vant 首次發布剛好過去了半年時間,在這半年時間裡 Vant 團隊廣泛吸納社區的反饋和建議,持續對組件進行打磨、優化,使得 Vant 逐漸成長為一個輕量、可靠的移動端 Vue 組件庫。在這個時間點上我們決定發布 Vant 的 1.0 正式版,希望未來有更多小夥伴能夠參與到 Vant 的開發和使用中來。
  • Android Studio 3.1 正式發布,默認 D8 Dex 編譯器;vue-element-admin 3.6.4 發布
    Android Studio 3.1 正式發布,默認使用 D8 Dex 編譯器vue-element-admin v3.6.4 發布,後臺集成方案
  • 前端周報:Vue 3.0正式發布,代號One Piece;JS庫 Moment.js 進入維護狀態;iOS 14 正式發布
    Vue 3.0 正式發布:代號「One Piece」 2020 年 9 月 18 日晚,Vue 團隊發布了 Vue 3.0 正式版本,代號為 One Piece(海賊王)。本次主版本更新包含性能的改進,更小的 bundle 體積,對 TypeScript 更好的支持,用於處理大規模用例的全新 API,以及為框架未來的長期迭代奠定了夯實的基礎。
  • vue cli 3.0創建項目
    關於安裝Vue CLI 的包名稱由 vue-cli 改成了 @vue/clinpm install -g @vue/cli安裝完成後查看版本vue --V項目創建關於項目創建,除了命令創建3.x還增加了圖形化界面創建以及管理vue項目在創建新項目時還可以混合選用多種集成
  • Element UI for Vue 3.0 來了!【官方總結】
    第一個使用 TypeScript + Vue 3.0 Composition API 重構的組件庫 Element Plus 發布了 🎉 ~2016 年 3 月 13 日 Element 悄然誕生,經歷了 4 年的風雨洗禮,我們從一個餓了麼內部業務組件庫成長為 Vue 生態裡最流行的 UI
  • Vue開發者的福音:antd design官方正式發布ant-design-vue
    近日阿里的螞蟻金服的體驗團隊正式官宣發布了針對Vue的ant-design-vue組件,這對廣發Vue開發者來說是一大福音。直以來,國內的前端開發者大多使用的是React和Vue進行前端頁面開發,而Vue作為一款國人作者開發深受國內開發者的喜愛,Vue健全的中文文檔、靈活的字符串模板語法、豐富的開源社區及生態是廣發開發者選擇使用Vue開發的重要原因。
  • Vue3.0+TS 項目上手教程
    轉自:Vue3擁抱TypeScript的正確姿勢 :https://juejin.im/post/6875713523968802829一個完整的Vue3+Ts項目,支持.vue和.tsx寫法 項目地址:https://github.com/vincentzyc/vue3-demo.gitTypeScript 是
  • Vue 3.0 中文手冊 (上)
    Vue 3 安裝天才第一步首先你得安裝Vue3方案一:克隆原始碼 https://github.com/vuejs/vue-next找到package.json不難看出在scripts中各種啟動命令項,同時也發現到作者使用rollup進行構建項目
  • Vue3.0終終終於要來了!!
    發布五周年,今天我們趁熱打鐵在年三十發布了 Vue 2.6 "Macross",祝大家新春快樂!Slots:新語法,性能優化,準備接軌 3.0Slot /插槽 是 Vue 組件的一個重要機制,因為它使得完全解耦的組件之間可以靈活地被組合。在 3.0 的原型開發過程中,我們發現了一些可以進一步改善現有的 slot 機制的方法。這裡面有些可能會需要少量破壞性的改動,但也有一些可以以完全向後兼容的方式被引入 2.x。
  • 從0到1封裝表單組件(TypeScript + Vue3.0 版)
    本文介紹了從0到1實現的表單組件的封裝,用到了 TypeScript + Vue3.0的技術,做出來的效果:bootstrap我們直接使用 bootstrap 的精美樣式。首先在通過 Vue-Cli 安裝的項目中安裝 bootstrap。
  • vue3.0 diff算法詳解(超詳細)
    :隨之vue3.0beta版本的發布,vue3.0正式版本相信不久就會與我們相遇。尤玉溪在直播中也說了vue3.0的新特性typescript強烈支持,proxy響應式原理,重新虛擬dom,優化diff算法性能提升等等。小編在這裡仔細研究了vue3.0beta版本diff算法的源碼,並希望把其中的細節和奧妙和大家一起分享。首先我們來思考一些大中廠面試中,很容易問到的問題:1 什麼時候用到diff算法,diff算法作用域在哪裡?
  • 學習Vue3.0,先從搭建環境開始
    這是小編關於Vue3.0系列文章的第二篇,本文將帶您從零搭建一個基於Vue3.0與vite的Vue3.0開發環境,通過本文的學習,你將學習到以下內容:本文首發於公眾號【前端有的玩】,您也可以通過微信搜索【前端有的玩】關注我的公眾號加我微信好友,手摸手和你一起學習Vue3.0。
  • Vue 3.0源碼終於開放了
    10 月 5 日凌晨,尤雨溪在微博宣布 Vue 3.0 的源碼開放了。
  • Vue 3.0 初探 - Proxy
    前言4 月 17 日,尤大在微博上宣布 Vue 3.0 beta 版本正式發布。在尤大發布的《 Vue3 設計過程》文章中提到之所以重構 Vue 一個考量就是JavaScript新的語言特性在主流瀏覽器中的支持程度,其中最值得一提的就是Proxy,它為框架提供了攔截對於object的操作的能力。Vue 的一項核心能力就是監聽用戶定義的狀態變化並響應式刷新DOM。