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





























