從今天開始,你可以在任何 react Native 應用程序中使用盡可能少或盡可能多的 Expo SDK。 我們已經花了很多時間構建和維護這些包含原生應用特性的跨平台 API,我們很高興最終實現了向整個 react Native 生態共享這些 API,並將它們作為一個整體繼續優化。
Expo 未來的兩個主要的工程流分別是 Managed 和 Bare。 Managed 應用程序是通過 expo-cli、移動設備上的 Expo 客戶端和我們的各種服務: Push Notifications、構建服務和 無線(OTA)更新 構建的。 Expo 試圖盡可能多地為你管理構建應用程序的復雜性,所以我們稱之為 Managed Workflow。 另一方面,Bare 應用程序將所有的控制權(以及隨之而來的復雜性)交給了開發人員。
我們稱這個初始版本為預覽版,因為還它沒有我們希望的那樣足夠簡化,但是我們希望盡快把這些功能交到用戶手中,因為它們已經是一個很大的改進了。
Introducing Unimodules
React Native 包一般都是小的整體。 如果他們需要與 Filesystem 或 Permissions 進行交互,不同的包將以各自的方式實現這個邏輯。 其結果是導致用戶需要做不必要的重復工作、處理 bug 以及各種修改。
因為 Expo 最初是作為一個整體建立的,所以自然而然地,我們為 API 的這些基本構建塊建立並依賴於一個更通用的解決方案。 當涉及到將 Expo 拆分以使開發人員能夠按需挑選 SDK 的部分時,我們面臨一個決定: 退一步,在每個模塊中提供這些構建塊的特殊實現? 或者構建一個允許模塊之間干凈利落地交互的工具?
這項工作的成果是一個名為 Unimodules 的項目。 Unimodules 是一個 toolchain(工具鏈),用於構建模塊化的 React Native 插件,這些插件可以相互交互。 我會把這些細節留到下一篇文章中,但是我們很興奮,因為這有可能解決 React Native 中原生模塊存在的一系列問題。 它還打開了與其他相鄰社區(如Flutter)共享 cross-platform APIs 實現的可能性ーー我們通過制作一個用於 Flutter 的 Unimodule 適配器和發布一些 Flutter 包來使用 Expo SDK! (如果你好奇的話,可以閱讀 How to use Expo Unimodules in Flutter)
讓我們來看看這個問題的實質: 如何在應用程序中使用這些 API?
在 React Native 應用程序中安裝 Unimodule
1. 獲取 react-native-unimodules
如果你通過 react-native init 或者 ignite-cli 之類的工具創建 React Native 項目,那么您需要將 react-native-unimodules 包添加到項目中並首先對其進行配置: 按照 README 中的說明進行操作。 這個包提供了其他模塊通常依賴的功能(如 Permissions, constants, 和 FileSystem) : 它是一個構建其他模塊的平台。 每個應用程序只需要這樣做一次。
如果通過運行 expo init 並選擇 Bare 模板,通過 expo-cli 創建一個 Bare React Native 項目,那么您的項目將默認安裝並配置 react-rative-unimodule。 您可以使用 react-native run-ios 或 react-native run-android 而不是 expo start 來運行這個項目。
2. 查找並安裝所需的 packages
在 Expo 文檔中的 Expo documentation部分,找到要添加到項目中的 API。 跳轉到 Installation 部分,並按照鏈接進入 Bare React Native 的安裝說明。 大多數軟件包都有相同的簡單安裝流程,但在少數情況下,除了配置依賴項之外,您還需要添加一些代碼。 接下來,你就可以應用程序中使用它了。
需要注意的是,SDK 中包含的某些 api 不是 Unimodules: MapView 只是 react-native-maps,SVG 是 react-native-svg,Gestorehandler 是 react-native-gesturehandler,takeSnapshotAsync 是 react-native-view-shot 的包裝。 所有這些 API 都可以按照相應 READMEs 中的說明進行安裝。
在 Managed 應用程序中安裝 Unimodule
當你在 expo init 的時候選擇 Managed 時,你將得到一個可以在 Expo 客戶端打開的項目,其中包括 expo package,它是構成 expo SDK 的包的集合。 例如,它依賴於並重新導出 expo-permissions, expo-file-system, expo-web-browser 等模塊。
在不久的將來,expo package 將只包含最小的核心包,類似於 react-native-unimodules,要在應用程序中使用其他包,你需要安裝 npm 包,但不需要本修改原生代碼。 這將實現更小的 bundle 大小和更快的構建時間,因為只包含你在應用程序中使用的代碼。
社區中的其他人可能開始圍繞 Unimodule 工具構建他們的原生模塊。 我們不能在 Expo 客戶端中支持任意的原生模塊,同時通過 App Store 發布,所以你現在不能在 Managed 應用中安裝這些模塊。
Expo 團隊設計和創建的 Unimodules 都將作為基礎設施,我們將繼續為其添加 Web 和 TypeScript 的支持,更多特性,敬請期待。
ExpoKit 的未來
在博客 ExpoKit 2019中,我有提到我們計划繼續支持和改進 ExpoKit 工作流。 這是對其進行評估的第一個結果。 通過在一個簡單的 React Native 應用程序中安裝 Unimodules,你已經可以非常接近使用 ExpoKit 的效果了。 不過還是缺少了 Expo 里基於 TaskManager、 AppLoading 和 SplashScreen 實現的 notifications services, background tasks 以及我們的實驗性的 AR 相關的 API。 我們已經開始着手將后台任務移植到 React Native,並將在之后不久啟動 OTA 更新 和 Notifications 的 Unimodules。
廣州品牌設計公司https://www.houdianzi.com PPT模板下載大全https://redbox.wode007.com
What’s next
Update : 2019年3月14日,我們發布了這個功能! 使用 react-native-unimodules,大部分 Unimodules 的安裝都是為你自動完成原文:我們對接下來要發生的事情非常興奮:an open pull request 自動將 Unimodules 安裝到 iOS 和 Android 項目中,這樣在大多數情況下,你只需要從 npm 安裝包就可以了。 我們希望使 Unimodules 的安裝盡可能簡單。
我們也期待着將我們的 OTA 更新 和 Background Tasks APIs 交到 Bare 工作流用戶手中。 最后,我們希望幫助其他人使用 Unimodules 基礎設施來建立自己的庫,如果這對他們有益的話,因此我們將記錄如何從頭開始構建自己的 Unimodule,以及如何轉換現有的 React Native 庫。
