Taro 3.4 beta 發布: 支持 Preact 為應用開闢更多體積空間

2022-01-25 Taro社區

項目體積是困擾小程序開發者的一大問題,如果開發者使用 Taro React 進行開發,更是不得不引入接近 100K 的 React 相關依賴,這讓項目體積變得更加捉襟見肘。因此,Taro v3.4 的主要方向,是探索對於 Preact 的支持。

Preact[1] 是一款體積超小的類 React 框架,提供和 React 幾乎一致的 API,而體積只有 5k 左右。

支持使用 Preact—

Taro v3.4 正式實現了對 Preact 的支持,下文將簡單介紹適配思路及用法。

適配思路1. 運行時改造

Taro 在小程序環境模擬實現了類瀏覽器環境[2],因此理論上任意的前端框架都可以在 Taro 中使用。

對於 Preact,它與 React 最大的不同在於沒有實現合成事件系統[3],而是直接使用瀏覽器的事件方法,此外還使用了少量和 React 不一樣的 DOM API。

對於事件的適配,Taro 已經提供了瀏覽器規範的事件方法,因此只需要再處理 Preact 的事件名與小程序事件名的差異。而對於 DOM 方法,則需要額外實現 Preact 使用到的 DOM API。

2. 兼容 React 生態

Preact 使用了 preact/compat 去磨平與 React 的 API 差異,讓 React 的各種生態庫可以直接運行在 Preact 上。得益於此,開發時我們可以使用任意的 React 生態庫,甚至對 React、ReactDOM 的 API 引用也不需要修改,只需要簡單地配置 alias[4] 即可:

// Webpack config
const config = {
  "resolve": {
    "alias": {
      "react": "preact/compat",
      "react-dom/test-utils": "preact/test-utils",
      "react-dom": "preact/compat",
      "react/jsx-runtime": "preact/jsx-runtime"
    },
  }
}

用法介紹

文檔地址[5]

新項目

運行 taro init 時,框架選擇 Preact 即可創建基於 Preact 的項目。

現有的 React 項目

將 CLI、項目中 Taro 相關的依賴更新到 v3.4.0-beta 版本。

yarn add preact @tarojs/plugin-framework-react

const config = {
  // ...
  framework: 'preact'
}

module.exports = {
  presets: [
    ['taro', {
      framework: 'preact'
    }]
  ]
}

如果項目使用了 TypeScript,請打開 skipLibCheck 配置,以避免和其它 React 生態庫配合使用時報類型錯誤:
{
  ...
  "skipLibCheck": true,
}

Vue 3 支持 Composition API 版本的小程序生命周期鉤子—

文檔地址[6]

Vue3 提供了 Composition API(組合式 API)[7] 特性,和傳統的 Options API 不同,Composition API 提供了全新的編碼方式 ,可以讓我們更好地去組織和復用代碼邏輯。

過去 Taro 只提供了 Options API 版本的小程序生命周期鉤子,開發者往往對於這些鉤子和 setup 函數內部該如何通訊、如何共享數據等問題感到困惑,更是不能很好地兼容 script setup[8] 語法。

因此 Taro v3.4 提供了 Composition API 版本的小程序生命周期鉤子,讓開發者更方便地使用 setup 語法,例子:

<script setup>
import { useDidShow } from '@tarojs/taro'

useDidShow(() => console.log('onShow'))
</script>

運行時體積優化—

目前 Taro 對於前端框架的適配層代碼都放在了運行時庫 @tarojs/runtime 裡,意思即當開發者使用 React 時,還是會包含 Vue2、Vue3 的適配層代碼。(Tree Shaking 失敗的原因是使用了 Webpack Provider Plugin 導出 @tarojs/runtime 裡的 BOM API)

因此,Taro v3.4 以 Taro 插件的形式去實現對於各前端框架的適配,其中一個好處是可以把上述運行時適配層的代碼拆分到各個插件內。加上對運行時代碼的寫法優化,3.4 版本的運行時減少了約 30k 的空間。

另一個好處是現在開發者可以通過編寫 Taro 插件去支持任意的前端框架,而幾乎不需要改動 Taro 的核心代碼。

升級指南—1. 安裝 v3.4.0-beta 的 CLI 工具:
npm i -g @tarojs/cli@beta

2. 更新項目依賴

如果安裝失敗或打開項目失敗,可以刪除 node_modulesyarn.lockpackage-lock.json 後重新安裝依賴再嘗試。

修改 package.json 文件中 Taro 相關依賴的版本修改為 ~3.4.0-beta.0,再重新安裝依賴。

3.【Breaking Changes】安裝對應的框架適配插件

因為 Taro v3.4 把各前端框架的適配邏輯拆分到對應的插件中,因此舊項目升級時需要安裝對應框架的適配插件:

使用 React,請安裝 @tarojs/plugin-framework-react使用 Vue2,請安裝 @tarojs/plugin-framework-vue2使用 Vue3,請安裝 @tarojs/plugin-framework-vue3其他—Breaking Changes百度小程序使用 onInit 代替 onLoad 生命周期,以優化首次啟動時間。最後—

接下來 Taro 的重心將會放在編譯系統升級(如升級 Webpack5)和優化 H5 能力(如輸出 SSR 方案、優化路由系統等)上。

鴻蒙應用 && OpenHarmony

Taro 迭代的另一條主線是對鴻蒙應用 && OpenHarmony 的適配,Taro 與 OpenHarmony 團隊成立了跨平臺 UI 興趣組(SIG-CROSS-PLATFORM-UI),聯合社區共同展開適配工作。目前第一階段的開發工作即將完成,12 月初會發布首個可用的體驗版本。

相關諮詢:

鴻蒙 && OpenHarmony 適配小組[9]

鴻蒙 & OpenHarmony 交流群:

引用資料
—[1]

Preact: https://preactjs.com/

[2]

類瀏覽器環境: https://docs.taro.zone/docs/next/implement-note#%E8%BF%90%E8%A1%8C%E6%97%B6

[3]

合成事件系統: https://reactjs.org/docs/events.html

[4]

alias: https://preactjs.com/guide/v10/switching-to-preact#setting-up-compat

[5]

文檔地址: https://docs.taro.zone/docs/next/preact

[6]

文檔地址: https://docs.taro.zone/docs/next/composition-api

[7]

Composition API(組合式 API): https://v3.vuejs.org/guide/composition-api-introduction.html#why-composition-api

[8]

script setup: https://v3.vuejs.org/api/sfc-script-setup.html#basic-syntax

[9]

鴻蒙 && OpenHarmony 適配小組: https://github.com/NervJS/taro/discussions/categories/%E9%B8%BF%E8%92%99-openharmony-%E9%80%82%E9%85%8D%E5%B0%8F%E7%BB%84

[10]

適配進度: https://github.com/NervJS/taro/projects/2

相關焦點

  • Taro 正式發布 3.4 版本: 全面支持 Preact & Vue 3.2
    距 Taro v3.4 beta 版本的發布已有一段時間,期間我們完善了對 Preact 和 Vue3 的支持,加入了一些有趣的特性,更是對 H5 作了大幅度的優化與調整,並於近期發布了 v3.4 的正式版本。
  • Linux Mint 20.1 beta 發布,支持 exFAT 以及 Web App
    IT之家12月19日消息 Linux Mint 系統近日發布了 Linux Mint 20.1「Ulyssa」 beta 版本,帶來了諸多新功能。該系統基於 Ubuntu 20.04 設計,內核升級到 Linux 5.4,桌面升級到 Cinnamon 4.8。
  • 蘋果為開發人員發布了第九個watchOS5beta
    近期涉及蘋果為開發人員發布了第九個watchOS5beta內容備受矚目,很多讀者對此也很有興趣,現在給大家羅列關於蘋果為開發人員發布了第九個watchOS5beta最新消息。上周五,蘋果為開發人員推出了第九個watchOS 5 beta。該更新是在該公司向開發人員發布第十個iOS 12 Beta和向其Apple Beta軟體計劃的成員發布了第八個iOS 12公共Beta 之後的 一天。
  • Adobe發布原生支持蘋果M1的Premiere Beta版
    Adobe發布原生支持蘋果M1的Premiere Beta版 2020年12月24日 16:50作者:申沛編輯:申沛文章出處:泡泡網原創
  • Adobe發布全新Photoshop Beta:支持蘋果M1晶片Mac
    此前不久,蘋果發布了搭載自研ARM晶片M1的MAC產品,隨後不少軟體廠商紛紛宣布將適配M1晶片。現在全球知名辦公軟體廠商Adobe也宣布推出全新Photoshop Beta版本,適用於搭載M1晶片與蘋果最新作業系統的Apple Silicon硬體。
  • Android Studio 3.4穩定版發布,支持Android Q Beta和Intellij 2018.3.4
    Google 已經發布了最新版本的集成開發環境(IDE) Android Studio 3.4。3.3版於今年早些時候發布。
  • 蘋果發布Swift 5:減小iOS 12.2應用體積
    在蘋果工程師和開源社區的貢獻下,它進行了多次迭代更新,現在是4.2.1版本。自第一個版本以來一直影響用戶的Swift一個重要方面是它的應用程式二進位接口(或 ABI)不穩定。這在實踐中意味著蘋果不能在其作業系統中包含Swift語言支持,因為使用Swift 3編寫的應用程式將不能與Swift 4的語言支持二進位文件一起使用。
  • iOS11.4.1beta推送,更有iOS11.4你不知道的新增隱藏功能
    iOS11.4.1beta版本發布地球不爆炸,優化不放假在僅僅相隔一天的時間不到,蘋果在發布iOS11.4的正式版後,在北京時間的今天凌晨,又給我們帶來了iOS11.4的第一次小beta版本更新iOS11.4.1betaiOS11.4.1beta
  • 空間幾何體的表面積和體積
    「換」是指變換觀察角度,使幾何體變換前後等體積.變換的標準是看相應的底面和高是否容易求解;「拆」是將一個幾何體拆成幾個幾何體,如非規則形體的體積計算問題,有時為了計算方便,把某個幾何體拆出,另畫圖形或另行計算,這都是「拆」法的體現;「拼」是將不易求體積的幾何體轉化為易求的規則幾何體求解,是一種常用的技巧;「補」是將不太容易求體積的幾何體「補」成熟悉的形體,使形體結構更完整、更充實,從而使得求體積的思路大增
  • 更多由Intel Braswell CPU提供支持的Chromebook能運行Linux應用程式了
    ,它最近使其集成虛擬化機器能夠在Chrome OS上運行Linux應用程式,從而支持使用英特爾Braswell cpu的Chromebook。在2018年5月,谷歌正式確定Chromebook將很快能夠運行Linux應用程式,目前正在進行beta測試,只有少數新式的Chromebook支持.deb格式的Linux軟體包的安裝,包括谷歌的Pixelbook,現在承諾更多的Chromebook將在未來幾個月內獲得新功能。
  • iOS 11.4 beta1~beta3不完美越獄教程
    iOS11.4.1 正式版發布之後,Electra團隊接著發布iOS 11.2-11.3.1越獄消息。隨後,Electra 越獄工具更新 至v1.0.3版本,此版本支持運行 iOS 11.4 beta1~beta3 的 64 位設備進行不完美越獄。
  • 華為首款商用臺式機發布,體積僅為傳統機箱三分之一
    華為首款智慧商用臺式機MateStation B515正式發布。作為Mate家族的最新成員,其進一步完善了華為在PC市場的全面布局,並通過商用臺式機不斷豐富1+8+N全場景智慧體驗,為更多用戶提供極致的PC體驗。
  • 蘋果發布新版iOS, 支持iCloud雲端信息
    蘋果公司周二正式發布了iOS軟體的最新版本,用於iPhone和iPad的IOS 11.4,新版本還支持iCloud雲端信息功能,以及其他新功能,包括最吸人眼球的AIR 2(隔空播放2)和HomePod 立體聲組合功能。
  • 添加iOS13.5越獄支持:checkra1n 0.10.2 beta發布下載!
    [PConline資訊]昨日,Pwn20wnd團隊先行發布了unc0ver5.0.0的下載,它理論上支持iOS11~iOS13.5系統全iOS設備的越獄(iOS12.3-12.3.2、12.4.2-12.4.5除外)。
  • 早高FENG:蘋果發布iOS/iPadOS 14.4 Beta 1/微軟更新鬧鐘和時鐘應用
    蘋果今天向開發人員發布了新的 iOS/iPadOS 14.4 更新的首個測試版,兩天前,蘋果發布了支持 Apple Fitness+、AirPods Max、適用於 iPhone
  • iOS 14 beta 7,彩虹壁紙支持深色
    在2020年9月04日凌晨時段,蘋果正式發布了 iOS 14.0 beta 7 系統,與 beta 6 相隔 九 天,該版本還是內測版,正式版需要等9月份出現。iOS 14.0 beta 7 更新內容:調整壁紙,彩虹壁紙可支持深色模式 修復 AirPods 連接問題 修復 NFC 頁面英文問題 資源庫分類小調整設置相片隱藏相簿改
  • 蘋果發布iOS 13.5 Beta3:這兩項新功能值得點讚
    最近,蘋果發布的 iOS 13.5測試版就對這一問題提出了解決方案。這不今日凌晨,蘋果又為開發者預覽版用戶推送了iOS 13.5 Beta3測試版的更新。是的,你沒看錯,是直接到iOS 13.5 Beta3了!Beta1/2去哪兒了?之前的iOS 13.4.5呢?
  • 為移動應用產業開闢出海新航路,華為應用市場是如何「破冰」的?
    回顧這一年移動應用市場的發展,特殊的社會背景讓移動辦公、線上會議、移動遊戲等行業出現了爆發式的熱度。對於更廣大的移動應用及開發者群體來說,如何開闢新的商業價值航路,成了當務之急,因此今年「出海」成了業界尋找出路的普遍戰略選擇。
  • 蘋果發布 iOS/iPadOS 14.4 Beta 1
    今天凌晨,檢測到蘋果伺服器推送了一下內容:iOS 14.4 beta (18D5030e) iPadOS 14.4 beta (18D5030e) watchOS7.3 beta (18S5780d) tvOS 14.4 beta (18K5780c) macOS Big Sur 11.2 beta (20D5029f) 不過目前還不知道 iOS 14.4 更新中包含哪些內容,但它可能側重於修復 iOS 14.3 版本中包含的錯誤和性能改進
  • iOS13.3b4越獄成功/降級設備A6X工具發布/unc0ver 3.8.0發布
    checkra1n successfully jailbreaks IOS 13.3 Beta 4 - the latest beta update.大概翻譯checkra1n成功越獄了IOS 13.3 Beta 4-最新的beta更新。      接下來就是Pwn20wnd大神,重頭戲,現在放出了支持A12 iOS12.4.1的unc0ver 3.8.0版本。現在可以下載越獄,支持A12 iOS12.4.1。