React Native 0.73 正式發(fā)布,你知道增加了什么嗎?
12 月 6 日,React Native 0.73 正式發(fā)布。這個(gè)版本增加了對(duì)使用 Hermes 進(jìn)行調(diào)試的改進(jìn)、穩(wěn)定的符號(hào)鏈接支持、Android 14 支持以及新的實(shí)驗(yàn)性功能。除此之外,還棄用了舊版調(diào)試功能,并發(fā)布了新架構(gòu)的下一個(gè)支柱:無橋接模式!
更新亮點(diǎn)
調(diào)試改進(jìn)
React Native 和 Hermes 團(tuán)隊(duì)致力于改進(jìn) React Native 中的調(diào)試體驗(yàn)。在 0.73 版本中,有了初步進(jìn)展。
Hermes 中的控制臺(tái)日志歷史記錄
console.log() 是開發(fā)人員快速調(diào)試 JavaScript 代碼的常用方式。在之前的版本中,React Native 應(yīng)用中的控制臺(tái)日志必須等到連接了調(diào)試器才會(huì)被記錄,這使得觀察在應(yīng)用加載早期發(fā)生的日志很困難。
在 React Native 0.73 版本中解決了這個(gè)問題?,F(xiàn)在,Hermes 在后臺(tái)捕獲所有的 console.log() 調(diào)用,并在首次連接調(diào)試器時(shí)將其發(fā)送到控制臺(tái)選項(xiàng)卡中,與 Web 瀏覽器中的調(diào)試體驗(yàn)相一致。這個(gè)新的行為適用于 Flipper、連接到 Hermes 的 Chrome DevTools,以及實(shí)驗(yàn)性的新調(diào)試器。
調(diào)試文檔更新
該版本對(duì)文檔中的調(diào)試部分進(jìn)行了更新,其中包括連接所有支持的調(diào)試器的最新信息,有關(guān) React DevTools 的更多信息,以及經(jīng)過更新的視覺效果。
圖片
實(shí)驗(yàn)性的新調(diào)試器
React Native 團(tuán)隊(duì)正在開發(fā)一種全新的 JavaScript 調(diào)試體驗(yàn),旨在取代 Flipper,在 React Native 0.73 版本中提供了預(yù)覽版。這個(gè)新調(diào)試器可以立即打開,并且具有一個(gè)裁剪過的 Chrome DevTools 用戶界面,專門為使用 Hermes 調(diào)試 React Native 進(jìn)行了定制。
圖片
Metro 中的穩(wěn)定符號(hào)鏈接支持
現(xiàn)在,默認(rèn)情況下啟用了 Metro 對(duì)符號(hào)鏈接的支持。通過符號(hào)鏈接支持,React Native 可以與使用 watchFolders 配置的 monorepo 設(shè)置一起正常工作。
符號(hào)鏈接在 Metro 的內(nèi)部得到了完全的支持,這意味著它們可以與 Fast Refresh 等功能良好地配合使用,并且在打包過程中幾乎沒有性能開銷。無論是否使用 Watchman,符號(hào)鏈接在所有桌面平臺(tái)上都得到了支持。
Android 上的 Kotlin 模板
從 0.73 版本開始,Kotlin 現(xiàn)在是使用 React Native 構(gòu)建的 Android 應(yīng)用的推薦語言。這符合 Android 生態(tài)系統(tǒng)多年來的發(fā)展方向,并允許使用一種現(xiàn)代化的語言編寫應(yīng)用。
該版本已經(jīng)更新了在 Android 上使用的 React Native 模板,將其從 Java 改為了 Kotlin。新的 MainActivity.kt 和 MainApplication.kt 文件的大小減小了36%。
升級(jí)助手也已更新,使得將 .java 文件遷移到 .kt 文件更加容易。如果之前修改了項(xiàng)目中的 Java 文件,并且需要支持將其遷移到 Kotlin,可以使用 Android Studio 的 Code > Convert Java file to Kotlin File 實(shí)用程序(也可以通過快捷鍵 Cmd ? + Shift ? + Option ? + K 訪問)。
Android 14 支持
React Native 0.73 已經(jīng)完全支持 Android 14。從 0.73 版本開始,React Native 開發(fā)人員現(xiàn)在可以面向最新的 Android SDK 版本,API 級(jí)別為34。
Java 17 和 Android Gradle 插件升級(jí)
為了支持 Android 14,已經(jīng)將用于構(gòu)建 Android 應(yīng)用的 Android Gradle 插件(AGP)版本從 7.4.x 更新到 8.1.x。
這個(gè) AGP 的重大版本升級(jí)帶來一系列突破性變化,可以在 Google 的發(fā)布說明(8.0.0 和 8.1.0)中找到。
最重要的是,現(xiàn)在構(gòu)建 Android 應(yīng)用需要 Java 17??梢酝ㄟ^運(yùn)行以下命令來更新 Java 版本:
brew tap homebrew/cask-versions
brew install --cask zulu17
并按照入門指南中的文檔更新 JAVA_HOME。
如果你是庫開發(fā)人員,你的庫應(yīng)該可以在不進(jìn)行更改的情況下與 React Native 0.73 兼容。
授予部分訪問照片和視頻的權(quán)限
Android 14 用戶現(xiàn)在可以使用選定照片訪問功能,授予應(yīng)用程序?qū)ζ涿襟w庫中特定項(xiàng)目的訪問權(quán)限,而不是對(duì)所有媒體的訪問權(quán)限。React Native 應(yīng)用已經(jīng)更新至 0.73 版本,通過在 PermissionsAndroid API 中使用 READ_MEDIA_VISUAL_USER_SELECTED 權(quán)限來支持此功能。
圖片
最小 SDK 提升
React Native 0.73 將是最后一個(gè)支持 Android 5.0(API 級(jí)別 21)的版本。下一個(gè)版本的 React Native 的最低 SDK 版本將是 23(Android 6.0)。
新架構(gòu)更新
自 React Native 0.68 版本起,引入了新的渲染器(Fabric)和新的原生模塊系統(tǒng)(TurboModules),社區(qū)用戶已經(jīng)可以開始實(shí)驗(yàn)和評(píng)估這些新功能。
在 React Native 0.73 版本中發(fā)布了新架構(gòu)的另一項(xiàng)重要組件:無橋接模式。在此之前,當(dāng)應(yīng)用中啟用新架構(gòu)時(shí),橋接機(jī)制仍然可用,以維持與舊組件和模塊的向后兼容性。然而,React Native 團(tuán)隊(duì)的長遠(yuǎn)目標(biāo)是最終淘汰橋接。從 React Native 0.73 版本開始,可以啟用無橋接模式,這將完全禁用橋接的創(chuàng)建。
除了無橋接模式,還提供了原生模塊互操作層,可在無橋接模式下重用舊模塊。在 React Native 0.72 版本中引入的渲染器互操作層也已經(jīng)適配無橋接模式。
與新架構(gòu)的其他部分一樣,無橋接模式目前仍處于實(shí)驗(yàn)階段。
已棄用的調(diào)試功能
Flipper ? React Native 集成
React Native 正在逐步減少對(duì) Flipper 作為調(diào)試 React Native 應(yīng)用的默認(rèn)工具的依賴。從 0.73 版本開始,將廢棄 React Native 中包含的原生 Flippe r集成(用于連接Flipper核心插件的引導(dǎo)代碼)。在接下來的版本中,將完全移除這種集成和相關(guān)依賴,這意味著 Flipper 的一些組件,如網(wǎng)絡(luò)插件,將不再工作。
然而,值得強(qiáng)調(diào)的是,F(xiàn)lipper作為一款獨(dú)立的調(diào)試工具,將繼續(xù)存在并被持續(xù)維護(hù)。即使在新的React Native項(xiàng)目中不再默認(rèn)包含F(xiàn)lipper,開發(fā)人員仍然可以手動(dòng)將其添加到應(yīng)用中,以滿足調(diào)試需求。
遠(yuǎn)程 JavaScript 調(diào)試
遠(yuǎn)程 JavaScript 調(diào)試是一種舊的調(diào)試模式,它將外部Web瀏覽器(Chrome)連接到應(yīng)用,并在Web頁面內(nèi)運(yùn)行JavaScript代碼,即 [http://localhost:8081/debugger-ui](http://localhost:8081/debugger-ui)。這種模式可能會(huì)導(dǎo)致調(diào)試時(shí)應(yīng)用行為不一致,并且與新架構(gòu)下的原生模塊不兼容。
在 0.73 版本中,遠(yuǎn)程JavaScript調(diào)試已被棄用,并已從開發(fā)菜單中刪除?,F(xiàn)在必須通過 NativeDevSettings API 手動(dòng)啟用遠(yuǎn)程調(diào)試。
重要變更
Babel 包重命名
該版本已將兩個(gè)與 Babel 相關(guān)的軟件包從Metro 移至 React Nativ e的存儲(chǔ)庫和版本控制系統(tǒng),以簡化維護(hù)和升級(jí)過程。這些軟件包的新版本支持 0.73 版本中的新架構(gòu)功能,因此需要更新這些依賴項(xiàng)。
在進(jìn)行升級(jí)時(shí),請(qǐng)使用升級(jí)助手以確保已更新這些依賴項(xiàng)。同時(shí),一些軟件包已更名:
- metro-react-native-babel-preset → @react-native/babel-preset
- metro-react-native-babel-transformer → @react-native/metro-babel-transformer
其他重要變更
以下是 0.73 版本中的一些重要變更:
- 最低Node.js要求提高至18.x
- 模板現(xiàn)在使用TypeScript 5.0
- Android:構(gòu)建 Android 應(yīng)用現(xiàn)在要求Java 17
- Android:將 Fresco 主要版本升級(jí)到3.0
- iOS:將最低 iOS 版本提高至13.4
- iOS:在通過 Xcode 運(yùn)行構(gòu)建時(shí),Metro 將不再自動(dòng)啟動(dòng)
對(duì)于庫作者:
- Android:升級(jí)到 AGP 8.1.1
React Native CLI 變更
- 在 build-android 命令中更改默認(rèn)任務(wù)前綴。從現(xiàn)在開始,當(dāng)運(yùn)行 build-android 時(shí),將運(yùn)行 bundle 任務(wù)而不是 assemble
- 刪除 Metro 配置默認(rèn)值的回退流程
在0.73中,我們已經(jīng)從CLI中刪除了這些默認(rèn)值的回退拷貝,因此需要使用來自 0.72 的更新后的 metro.config.js 格式。
- 從 run-ios 中刪除 --configuration 選項(xiàng)(替換為 --mode)
- 從 build-android 命令中刪除 --variant 選項(xiàng)(替換為 --mode)
棄用 @types/react-native
自 0.71 版本開始已經(jīng)將 TypeScript 類型與 react-native 一起發(fā)布。從 0.73 版本開始,將不再發(fā)布 @types/react-native。