宣布 React Native 0.70
我們很高興發布新版本的 React Native,0.70.0。此版本帶來多項改進,例如 Codegen 的全新統一配置、Hermes 作為預設引擎,以及對 Android 建置的完整 CMake 支援,同時也更新了全新架構的文件。請繼續閱讀以深入瞭解!
章節
全新架構的全新文件
在過去幾個月中,我們一直致力於在文件的全新架構章節中新增更多內容。在新的章節中,您可以找到遷移指南、範例和教學課程,讓您快速上手。
與此同時,您可以找到新的文件深入探討為何採用全新架構和其各個部分。我們希望這能幫助您更瞭解新 API 背後的原理。
非常歡迎任何意見反應,請在 react-native-website 儲存庫中告知我們。
Hermes 作為預設引擎
React Native 0.70 是第一個預設啟用 Hermes(我們內部開發的 JS 引擎)的版本。
這是 Hermes 團隊和 React Native 團隊共同努力的成果,以及社群的寶貴貢獻。我們致力於改進和微調 Hermes,使其效能更高,並提供社群高度要求的功能。
您可以在官方公告部落格文章中閱讀更多相關資訊。
Codegen 的全新統一配置
在 0.70 版本中,我們推出了一種統一的方式來定義 iOS 和 Android 的 Codegen 規格。先前,您必須將 Android 配置放在單獨的 build.gradle
檔案中。
現在,您可以直接在 package.json 中定義它,如下所示:
"codegenConfig": {
"name": "CustomAnimationView",
"type": "components",
"jsSrcsDir": "./src",
"android": {
"javaPackageName": "com.custom.animation"
}
}
此改進為函式庫維護者在將其程式碼庫遷移到全新架構時提供了更一致的體驗。
如果您是函式庫維護者,請務必在 此討論(位於 React Native 全新架構工作群組中)中告知我們您的進度。
適用於全新架構函式庫的 Android 自動連結
在 0.70 版本中,使用全新架構的使用者能夠自動連結函式庫,而無需在其 Android.mk 或 CMake 檔案上進行任何額外配置。
自動連結是 React Native 開發體驗的重要組成部分。它允許您使用 yarn add
命令包含外部函式庫,而無需處理 CocoaPods 或 Gradle 設定。
全新架構要求我們調整自動連結功能,以支援使用 Codegen 並向應用程式開發人員公開原生程式碼的函式庫。
雖然自動連結在 iOS 上的全新架構函式庫中運作良好,但在 Android 上卻並非如此。在 0.70 版本中,我們彌合了這個差距,您現在可以繼續使用 yarn add
將函式庫包含到您的專案中:它們將在任何架構上正確連結。
完整 CMake 支援 Android 建置
從 0.70 版本開始,使用者現在可以使用 CMake 來配置其原生建置。雖然我們不期望應用程式使用者直接編寫 C++ 程式碼,但您仍然需要原生編譯的進入點。
從現在開始,您可以針對專案中任何與 Android/原生相關的內容使用 CMakeLists.txt
檔案,而不是 Android.mk
檔案。
此變更使全新架構上的應用程式和函式庫使用者都受益,因為
- 在您的應用程式中建立的 CMake 檔案小得多(3 行程式碼,而 Android.mk 檔案則為 50 多行)。這使得未來 React Native 版本之間的更新體驗更加輕鬆,並減少了您端需要維護的程式碼。
- Codegen 現在同時產生
Android.mk
和CMakeLists.txt
,因此如果函式庫使用者使用我們為全新架構函式庫提供的預設設定,則無需擔心做任何事情。 - 上述自動連結將可與 CMake 和 Android.mk 檔案搭配使用,開箱即用。
- 儘管應用程式可以自由使用
Android.mk
或 CMake 檔案,但未來建議的解決方案將是 CMake 檔案(因為 CMake 周圍有更好的文件、工具和生態系統)。
0.70 的重點
如上所述,此版本中一些更重要的改進是圍繞全新架構體驗。但是,還有其他值得注意的變更,包括
- Catalyst 的修復程式已上線,在 Podfile 中將
mac_catalyst_enabled
設定為true
(詳細資訊請參閱 upgrade-helper 差異)。 - 將 metro 升級到 0.72.0,這將啟用新的 React JSX 轉換:reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html。
- 移除
reactnativeutilsjni
,因為它是從與reactnativejni
相同的來源建置的,這使得每個 Android APK 建置節省了約 220 KB。(https://github.com/facebook/react-native/pull/34339)。
重大變更
還有一些重大變更
- 從 react-native 套件中移除 jest/preprocessor(0301cb285b,由 @motiz88 執行)
- 移除非標準
Promise.prototype.done
(018d5cf985,由 @motiz88 執行)
另請注意,Metro 的版本已升級到 0.72,其中包含 5 項重大變更。
升級
我們也升級了一些相依性
- 將 RN CLI 升級到 v9.0.0
- 將 Android Gradle Plugin 升級到 7.2.1
- 將 Gradle 升級到 7.5.1
- 將 RCT-Folly 升級到 2021-07-22
- 將 Metro 升級到 0.72
- 將 SoLoader 升級到 0.10.4
您可以在變更記錄中查看完整的變更清單。
致謝
88 位貢獻者及其 493 次提交協助促成了此版本的發布 - 感謝大家!我們也感謝其他所有提供意見反應以確保此版本盡可能穩定的人。