Pendekatan opini untuk mendukung beberapa platform dengan React Native menggunakan monorepo ruang kerja benang.
Lihatlah menjalankan React Native di mana-mana untuk panduan mendalam tentang bagaimana dan mengapa saya merekomendasikan mencoba pendekatan ini jika Anda berencana untuk mendukung banyak platform di aplikasi Anda.

Monorepo ini menggunakan ruang kerja benang dan naskah untuk mendukung proyek Native React Modular.
Gagasan intinya adalah mengisolasi kode aplikasi JavaScript dari konfigurasi platform (kode asli + bundler aplikasi seperti Metro dan Webpack).
Isolasi ini terjadi dengan menggunakan ruang kerja yang berbeda: kami memiliki ruang kerja app untuk kode aplikasi JavaScript, ruang kerja mobile untuk konfigurasi seluler React Native, ruang kerja macos untuk konfigurasi macOS asli React, dan sebagainya.
Kami sepenuhnya merangkul benang nohoist untuk memungkinkan penggunaan versi yang berbeda dari React Native pada setiap platform (yang disarankan tetapi tidak diperlukan), menyederhanakan adopsi pembaruan asli React Native.
Terima kasih Nohoist, setiap platform Workspace ( mobile , macos , dll.) Dapat bergantung pada versi React Native apa pun, terlepas dari versi apa yang digunakan ruang kerja platform lainnya. Misalnya, kita dapat menggunakan [email protected] pada aplikasi seluler dan [email protected] pada aplikasi macOS-selama kode aplikasi JavaScript mendukung kedua versi.
Pendekatan ini mempromosikan pembaruan asli bereaksi secara bertahap atas pembaruan di Lockstep.
Untuk detail lebih lanjut, lihat "Running React Native Everywhere: Yarn Workspaces Monorepo Setup".
️ Tolong perhatikan bahwa saya tidak mengatakan ini adalah cara yang tepat untuk melakukan reaksi monorepos asli. Ini hanyalah pendekatan yang saya nikmati menggunakan basis kode yang lebih besar :)
Anda dapat menggunakan repo ini sebagai boilerplate, melepas ruang kerja platform yang tidak Anda butuhkan, atau Anda dapat membuat pengaturan ini dari awal jika Anda ingin sepenuhnya memahami cara kerjanya.
[email protected]:mmazzarolo/react-native-universal-monorepo.gitcd react-native-universal-monorepo && yarnTutorial langkah demi langkah tentang membuat repositori ini dari awal:
Tutorial untuk platform TV dan Next.js dari @TheFinnomenon:
Sumber Daya Tambahan:
Perintah Pengembangan dan Bangun:
yarn android:metro : Mulai server Metro untuk Android/iOSyarn android:start : Mulai kembangkan aplikasi Androidyarn android:studio : Buka aplikasi Android di Android Studioyarn ios:metro : Mulai server Metro untuk Android/iOSyarn ios:start : Mulai kembangkan aplikasi iOSyarn ios:pods : Pasang IOS Cocoapods Dependencyyarn ios:xcode : Buka aplikasi iOS di Xcodeyarn macos:metro : Mulai Server Metro untuk MacOSyarn macos:start : Mulailah Mengembangkan Aplikasi MacOSyarn macos:pods : Instal MacOS Cocoapods Dependenciesyarn macos:xcode : Buka aplikasi MacOS di Xcodeyarn web:start : Mulai kembangkan aplikasi webyarn web:build : Buat build produksi aplikasi webyarn electron:start : Mulailah Mengembangkan Aplikasi Elektronyarn electron:package:mac : Paket biner produksi aplikasi elektron untuk macOSyarn electron:package:win : Kemas Binary Produksi Aplikasi Elektron untuk Windowsyarn electron:package:linux : Kemas Binary Produksi Aplikasi Elektron untuk Linuxyarn browser-ext:start : Mulai kembangkan ekstensi browseryarn browser-ext:build : Buat pembuatan produksi ekstensi browseryarn windows:metro : Mulai Server Metro untuk Windowsyarn windows:start : Mulai kembangkan aplikasi Windowsyarn tv:android:metro : Mulai server Metro untuk Android TVyarn tv:android:start : Mulai kembangkan aplikasi TV Androidyarn tv:android:studio : Buka aplikasi TV Android di Android Studioyarn tv:tvos:metro : Mulai server Metro untuk TVOSyarn tv:tvos:start : Mulai kembangkan aplikasi TVOSyarn tv:tvos:xcode : Buka aplikasi TVOS di Xcodeyarn tv:tvos:pods : Instal TVOS Cocoapods Dependenciesyarn next:start : Mulai Aplikasi Next.jsyarn next:build : Bangun Aplikasi Next.jsyarn next:serve : Sajikan Aplikasi Next.js BuildPerintah lain (kami menggunakan ultra-pelari untuk menjalankan perintah ini di semua ruang kerja):
yarn lint : serat setiap proyekyarn lint:fix : Lint + Perbaiki setiap proyekyarn test : Jalankan tes setiap proyekyarn typecheck : Jalankan pengecekan tipe TypeScript pada setiap proyek Saat bekerja pada React Native dalam monorepo, Anda akan melihat bahwa beberapa paket tidak akan bekerja dengan benar ketika diangkat-baik karena mereka perlu dihubungkan secara asli atau karena mereka akhirnya dibundel dua kali, mematahkan build (misalnya, react , react-dom ).
Ini bukan masalah dengan pendekatan yang digunakan dalam proyek ini per se. Ini lebih merupakan masalah umum dengan monorepos.
Untuk memperbaiki masalah ini, kami menandainya sebagai Nohoist, sehingga mereka akan diinstal di setiap paket yang tergantung padanya.
Dalam monorepo ini, Anda dapat melihat contoh perpustakaan tersebut di react-native-async-storage .
Di metro bundler dan konfigurasi webpack yang digunakan di seluruh monorepo, kami menggunakan satu set alat buatan untuk memastikan paket Nohoisted diselesaikan dengan benar.
Jadi, selama Anda menambahkan perpustakaan ini ke daftar nohoist , Anda harus baik untuk pergi?
Kami berusaha untuk membuat pengaturan ini kompatibel dengan benang klasik - tetapi, dengan beberapa tweak, ini kompatibel dengan benang 2+ juga (memberikan semua manfaat benang 2+).
Lihat #22 untuk info lebih lanjut.
yarn set version berry di Root of Project. Ini akan membuat file .yarnrc.yml ..yarnrc.yml untuk memastikan direktori node_modules semuanya dibuat di setiap ruang kerja: nodeLinker : node-modules
nmHoistingLimits : workspacesnmHositingLimits menceritakan bagaimana cara hoist dependensi untuk setiap ruang kerja. Dengan mengaturnya ke workspaces semua dependensi akan diinstal di node_modules dari setiap ruang kerja daripada diangkat ke folder root. Ini berarti Anda sekarang dapat dengan aman bagian noHoist di package.json root.json.Lihat Panduan "Mulai" Yarn 2+untuk info lebih lanjut.
Dalam beberapa kasus, benang klasik tidak akan dapat menyelesaikan dependensi dengan benar yang memiliki peerDependency pada react-native .
Lihat #22 untuk beberapa solusi. Perbaikan repo react-native-monorepo-tools sedang bekerja.
Kontribusi, diskusi, dan umpan balik dipersilakan! Silakan tanyakan apakah ada rencana aktif tentang perubahan fitur sebelum mengirimkan PR baru?